繁体   English   中英

如何使用python访问受密码保护的网站?

[英]How to access a password protected site using python?

我当时在想,如果我使用python的机制访问受密码保护的网站,则会收到401未经授权的错误,该错误需要身份验证数据。

因此,在脚本中,我尝试访问我的yahoo邮箱,该邮箱显然需要用户名和密码,我以为我会得到401,但我没有。

码:

yahoo_mail = 'http://mail.cn.yahoo.com'
br = mechanize.Browser()
r = br.open(yahoo_mail)
print r.info()  #here, I got 200, it's ok apparently

br.select_form(nr=0)  #select the login form
r = br.submit()  #submit the form without providing username and password
print r.info()  #but I didn't get 401, why?

题:

  1. 为什么我没有提供auth-info却没有得到401?
  2. 如果不是我的邮箱,那么其他任何网站都可以给我401吗?

如今,大多数网站都不使用HTTP身份验证。 因此,如果您无法登录,则不会返回401。 而是返回正常的200成功响应,并且网页的文本显示您尚未登录。

而是,网站使用cookie。 这意味着您的浏览器实际上并不知道它登录了哪些网站。 当您最终为Yahoo!提供成功的密码时,它要么更改它存储在浏览器中的cookie,要么甚至使cookie保持不变,而只是更改与cookie关联的数据库记录。

因此,HTTP状态代码通常在登录过程中没有用。相反,您将不得不刮擦返回的“ 200 Success”页面的文本,以查看它是否祝贺您登录或重复该表格; 或者,您也可以只检查返回的页面的URL,然后再次查看它是否为登录表单,或者是否为您想要访问的目的地。

  1. 身份验证失败并不表示不允许您查看身份验证后面的页面。 这意味着您将不会看到考虑您的凭据的此页面的版本。 如果您在主页上但未能通过身份验证,则仍然可以看到该主页。

  2. 搜索引擎似乎没有为401页编制索引,因此可能很难找到...

看起来Yahoo只是在他们的代码中处理密码验证。 尝试将以下两行添加到您的代码中:

f = open('a.html', 'w')
f.write(r.read())

阅读该页面时,您将再次看到同一页面。

看起来他们只有一些Javascript告诉您您的密码错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM