python urllib2,密码内容和空响应

2024-10-03 19:19:35 发布

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

我使用URLlib2(和python2.7)从网站获取一些内容。到目前为止,我一直在使用urllib2ok来获取内容OK,但这是我第一次访问在内容级别有密码的网站。我有一个合法的u:p(我显然不能在这里分享),而且似乎我没有给我的请求提供正确的凭证。在

我在这里使用了这个方法:Python urllib2, basic HTTP authentication, and tr.im(username, password)替换为字符串(“myUsername”、“myPassword”)

当我print result.read()我得到一个空行,当我尝试print result.headers()时,我得到:

<addinfourl at 40895752L whose fp = <socket._fileobject object at 0x00000000026757C8>>

例如,对于每个预期的调用实例,我假设这意味着那里有一个文件对象。。。在

我尝试print result.info()查看是否有一个头返回,我看到了一组头:

REDACTED
Date: Mon, 01 Oct 2012 10:06:24 GMT
Server: Apache/2.2.3 (Red Hat)
X-Powered-By: PHP/5.1.6
Set-Cookie: OJSSID=mc7u47e674jmpjgk3kspfgc9l3; path=/
Refresh: 0; url=http:REDACTED loginMessage=reader.subscriptionRequiredLoginText
Content-Length: 0
Connection: close
Content-Type: text/html; charset=UTF-8

所以我可以从“登录信息=reader.subscriptionRequiredLoginText“我没有正确发送凭证。在

有什么建议吗?在

呼叫代码是:

^{pr2}$

一个例子是:REDACTED-它不是我的网站!在


Tags: 密码内容网站okresultcontenturllib2级别
2条回答

我建议使用Requests for Humans而不是urllib2。它使用起来更简单,也更明显。在

有时站点不支持基本的HTTP授权,即假设在每个请求的头中发送凭据。相反,他们需要在登录页面上使用凭证进行发布。此POST在服务器上验证,如果凭据正确,服务器将返回“setcookie:name=value”响应,请求浏览器保存Cookie。然后使用这个cookie来标识经过身份验证的客户端。在

看来,这是你的案子。在您的示例中,您需要向http://www.content.alternative.ac.nz/index.php/alternative/login/signIn发出POST请求,使用您拥有的凭据设置参数“login”和“password”。然后从响应中检索cookie并将其添加到下一个请求中,如this。在

您会发现处理requests库比urllib2好得多。在

看看你提供的链接,它不需要基本身份验证,而是一个表单。。。因此,您需要获取表单的“action”属性的URL,并向其提交数据。使用请求的示例:

import requests
url = 'http://www.content.alternative.ac.nz/index.php/alternative/login/signIn'
r = requests.post(url, data={'username': 'username', 'password': 'password', 'remember': '1'})

我不能完全检查(因为我没有有效的u&p;p),但是通过有效地发送勾选“记住我”按钮,您应该可以通过r.cookies获得一个cookie,这意味着它可以用于进一步的请求,例如:

^{pr2}$

相关问题 更多 >