-1

我正在尝试使用以下代码登录经过身份验证的网页:

$workingDirectory/./pyt www.tczonline.ir

wget -q -P $workingDirectory/ --load-cookies=$workingDirectory/cookies.txt --save-cookies=$workingDirectory/cookies.txt --keep-session-cookies http://  www.tczonline.ir/?m=user

在第一行,python 脚本从 firefox 生成的 cookies.sqlite 文件中提取所需的 cookie。

好吧,这行得通,但直到我用 Firefox 手动登录网页。
如果我没有使用 Firefox 登录,这将不起作用。

为什么会这样?

为什么 wget 不独立工作,不使用 firefox?

4

2 回答 2

2

wget 可以并且确实独立于 Firefox 工作。您告诉它加载您的 Firefox cookie ( --load-cookies=$workingDirectory/cookies.txt),它确实如此!

如果您不想使用 Firefox,还有其他选择。首先,您可以使用来自其他浏览器的 cookie,只要它们是 Netscape 格式(这是大多数)。对于 IE,您可以使用导出 cookieFile > Import and Export > Export Cookies并指向wget其位置。

您也可以完全不使用任何浏览器 cookie。wget可以自行处理保存和加载cookies;你只需要告诉它这样做:

# On the first run, we just save the cookie:
$ wget --post-data 'user=foo&password=bar' \
  --save-cookies /path/to/cookie_file.txt \
  --keep-session-cookies \
  www.tczonline.ir/login

在这里,我们大概是foo作为用户名和bar密码提交到站点的登录表单中。选项,嗯...将--save-cookiescookie 保存到指定位置。该--keep-session-cookies选项还保存会话 cookie,以便您可以执行基于身份验证的活动。如果仅使用 ,则不会保存会话信息--save-cookies,但如果使用--keep-session-cookies选项,就站点而言,多次 Wget 运行被视为单个浏览器会话。

# Now wget can load page(s) behind authenticated areas:
$ wget --load-cookies /path/to/cookie_file.txt \
  www.tczonline.ir/secret

阅读有关wgetHTTP 选项的更多信息。

于 2013-08-09T18:22:12.957 回答
0

要仅使用 wget 执行此操作,您需要先将凭据发送到登录页面,然后将返回的 cookie 用于下一个请求。您代码中的页面使用简单的发布请求(没有 javascript 等),因此不会太难:

wget -q -O - \
    --load-cookies=$workingDirectory/cookies.txt \
    --save-cookies=$workingDirectory/cookies.txt \
    --keep-session-cookies \
    --post-data="mid=USERNAME&pwd=PASSWORD" \
    "http://www.tczonline.ir/?m=login&op=inc"

之后,该文件cookies.txt应该包含会话 cookie,您可以像上面显示的那样继续。

于 2013-08-09T18:02:44.033 回答