urllib2.urlopen 返回的对象没有 info() 或 geturl() 方法

0 投票
1 回答
956 浏览
提问于 2025-04-16 20:14

我正在使用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,而不是我们通常所说的“像文件一样的对象”。

想要查看源代码,可以去 这里

撰写回答