为什么wget使用Firefox cookies登录经过身份验证的网页?

2024-10-01 11:27:05 发布

您现在位置:Python中文网/ 问答频道 /正文

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

$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脚本从cookies.sqlitefirefox生成的文件。在

好吧,这是可行的,但直到我用firefox手动登录网页。
如果我不使用firefox登录,这将不起作用。在

为什么会这样?在

为什么wget在不使用firefox的情况下不能独立工作?在


Tags: 代码txt身份验证网页irsavewwwload
2条回答

要仅使用wget执行此操作,需要首先将凭据发送到登录页面,然后在下一个请求中使用返回的cookie。代码中的页面使用一个简单的post请求(没有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,您可以像上面所示的那样继续。

wget可以独立于Firefox工作。你告诉它加载你的Firefox cookies( load-cookies=$workingDirectory/cookies.txt),所以它这么做了!

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

你也可以自由地不使用任何浏览器cookies。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作为用户名和{}作为密码提交到站点的登录表单中。 save-cookies选项,嗯。。。将cookies保存到指定位置。 keep-session-cookies选项还保存会话cookie,以便您可以执行基于身份验证的活动。如果您只使用 save-cookies,但使用 keep-session-cookies选项,对站点而言,多个Wget运行被视为单个浏览器会话。

^{pr2}$

Read more about ^{}'s HTTP options

相关问题 更多 >