1

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

我在这里使用了方法:Python urllib2, basic HTTP authentication, and tr.im replace with (username, password)my credentials as a string ("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

所以我可以从“loginMessage=reader.subscriptionRequiredLoginText”中得知我没有正确发送凭据。

任何指针?

调用代码是:

def getArticle(newLink):
request = urllib2.Request(newLink)
base64string = base64.encodestring('%s:%s' % ("myUsername", "myPassword")).replace('\n', '')
request.add_header("Authorization", "Basic %s" % base64string)   
result = urllib2.urlopen(request)
print result.read()

一个示例 URL 是:已编辑 - 它不是我的网站!

4

2 回答 2

2

您会发现处理requests库比urllib2.

查看您提供的链接,它不需要基本身份验证,而是一个表单......所以您需要获取表单的“操作”属性的 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),但是通过有效发送“记住我”按钮,您应该获得一个可访问的 cookie r.cookies,希望这意味着可以用于进一步的请求,例如作为:

cookies = r.cookies
r = requests.get('http://www.content.alternative.ac.nz/index.php/alternative/article/view/176/202', cookies=cookies)
于 2012-10-01T10:09:30.353 回答
1

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

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

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

于 2012-10-01T10:06:19.433 回答