urllib2.urlopen, возвращающий объект без методов info () или geturl () - PullRequest
0 голосов
/ 25 июня 2011

Я использую Python 2.7.1 и пытаюсь использовать модуль urllib2 для доступа к некоторым веб-страницам.Согласно документации по Python, urllib2.urlopen():

Эта функция возвращает файлоподобный объект с двумя дополнительными методами, geturl() и info()

Однако онауказывает, что при попытке доступа к info() в последнем операторе печати в коде таких методов нет.Я получаю следующую ошибку:

AttributeError: HTTPResponse instance has no attribute 'info'

Я не понимаю этого.Я ничего не могу найти в Google, и в документации ясно сказано, что эти методы существуют с возвращенным объектом.Интересно, что, как показывают ошибки и тестирование методов, он возвращает объект 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 голос
/ 25 июня 2011

Проблема в том, что вы install_opener получаете HTTPNtlmAuthHandler. Когда этот класс обрабатывает запрос, он возвращает HTTPResponse вместо стандартного объекта типа файла.

Чтобы увидеть источник, перейдите здесь .

...