python urllib2、密码内容和空响应

python urllib2、密码内容和空响应,python,request,urllib2,Python,Request,Urllib2,我正在使用URLlib2(和python 2.7)从网站上获取一些内容。到目前为止,我一直在使用URLlib2 OK来获取内容OK,但这是我第一次访问在内容级别具有密码的网站。我有一个合法的u:p(我显然不能在这里分享),似乎我没有给我的请求提供正确的凭证 我在这里使用的方法是:将(用户名、密码)替换为我的凭据作为字符串(“myUsername”、“myPassword”) 当我打印结果.read()时,我得到一个空行,当我尝试打印结果.headers()时,我得到: 例如,对于调用的每个预期

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

我在这里使用的方法是:将
(用户名、密码)
替换为我的凭据作为字符串(“myUsername”、“myPassword”)

当我
打印结果.read()
时,我得到一个空行,当我尝试
打印结果.headers()
时,我得到:

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

我试图
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是:编辑-它不是我的网站

我建议使用urllib2而不是urllib2。它的使用更简单,也更明显

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


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

您会发现处理库比处理
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),但通过有效地勾选“记住我”按钮发送,您应该可以通过
r.cookies
访问cookie,这意味着可以用于进一步的请求,例如:

cookies = r.cookies
r = requests.get('http://www.content.alternative.ac.nz/index.php/alternative/article/view/176/202', cookies=cookies)

哦,太酷了,有很多东西要探索,谢谢!我想只要您将cookie传递给后续的每个调用,您就可以保持一个持久会话。感谢您的时间(我修复了获取标题数据的错误…)谢谢,这真的很有用,我将(1)编辑URL信息,并(2)将此标记为已回答,在等待我的解决方案之前,我相信解决方案在于正确处理u:p表格:)谢谢您的时间。