Как отладить запрос urllib2, использующий базовый обработчик аутентификации - PullRequest
19 голосов
/ 08 октября 2011

Я делаю запрос, используя urllib2 и HTTPBasicAuthHandler примерно так:

import urllib2

theurl = 'http://someurl.com'
username = 'username'
password = 'password'

passman = urllib2.HTTPPasswordMgrWithDefaultRealm()
passman.add_password(None, theurl, username, password)

authhandler = urllib2.HTTPBasicAuthHandler(passman)
opener = urllib2.build_opener(authhandler)
urllib2.install_opener(opener)

params = "foo=bar"

response = urllib2.urlopen('http://someurl.com/somescript.cgi', params)

print response.info()

В настоящее время я получаю исключение httplib.BadStatusLine при запуске этого кода. Как я могу пойти на отладку? Есть ли способ узнать, что такое необработанный ответ независимо от нераспознанного кода состояния HTTP?

1 Ответ

27 голосов
/ 08 октября 2011

Вы пытались установить уровень отладки в своем собственном обработчике HTTP? Измените свой код на что-то вроде этого:

>>> import urllib2
>>> handler=urllib2.HTTPHandler(debuglevel=1)
>>> opener = urllib2.build_opener(handler)
>>> urllib2.install_opener(opener)
>>> resp=urllib2.urlopen('http://www.google.com').read()
send: 'GET / HTTP/1.1
      Accept-Encoding: identity
      Host: www.google.com
      Connection: close
      User-Agent: Python-urllib/2.7'
reply: 'HTTP/1.1 200 OK'
header: Date: Sat, 08 Oct 2011 17:25:52 GMT
header: Expires: -1
header: Cache-Control: private, max-age=0
header: Content-Type: text/html; charset=ISO-8859-1
... the remainder of the send / reply other than the data itself 

Итак, три строки для добавления:

handler=urllib2.HTTPHandler(debuglevel=1)
opener = urllib2.build_opener(handler)
urllib2.install_opener(opener)
... the rest of your urllib2 code...

Это покажет необработанный цикл отправки / ответа HTTP на stderr.

Редактировать из комментария

Это работает?

... same code as above this line
opener=urllib2.build_opener(authhandler, urllib2.HTTPHandler(debuglevel=1))
... rest of your code
...