urllib2.urlopen 返回的对象没有 info() 或 geturl() 方法
我正在使用Python 2.7.1,并尝试用urllib2模块访问一些网页。根据Python的文档,urllib2.urlopen()
这个函数:
这个函数会返回一个像文件一样的对象,并且有两个额外的方法,
geturl()
和info()
但是,当我在代码的最后一个打印语句中尝试访问info()
时,它显示没有这样的函数。我得到了以下错误:
AttributeError: HTTPResponse instance has no attribute 'info'
我不明白这是为什么。我在谷歌上找不到任何相关信息,而文档明确说明这些方法在返回的对象中是存在的。有趣的是,通过错误信息和测试这些方法,我发现它确实返回了一个HTTPresponse
对象,并且有这些方法。我到底漏掉了什么呢?
我的代码如下:
import urllib2
import httplib, socket
import cookielib
import ntlm
from ntlm import ntlm
url = URLOFSOMESORT
user = USERNAMEHERE
password = PASSWORD
user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
data = ""
headers = { 'User-Agent' : user_agent }
passman = urllib2.HTTPPasswordMgrWithDefaultRealm()
passman.add_password(None, url, user, password)
cookie_jar = cookielib.CookieJar()
cookie_handler = urllib2.HTTPCookieProcessor(cookie_jar)
redirect = urllib2.HTTPRedirectHandler()
auth_basic = urllib2.HTTPBasicAuthHandler(passman)
auth_digest = urllib2.HTTPDigestAuthHandler(passman)
auth_NTLM = HTTPNtlmAuthHandler(passman)
opener = urllib2.build_opener(cookie_handler, auth_NTLM, auth_basic, auth_digest, redirect)
urllib2.install_opener(opener)
request = urllib2.Request(url, data, headers)
response = urllib2.urlopen(request)
#cookie_jar.extract_cookies(response, request)
print response.info()
1 个回答
1
问题在于你让 install_opener
接收了一个 HTTPNtlmAuthHandler
。当这个类处理请求时,它返回的是一个 HTTPResponse
,而不是我们通常所说的“像文件一样的对象”。
想要查看源代码,可以去 这里。