2011-10-08 10 views
18

Robię żądanie przy użyciu urllib2 i HTTPBasicAuthHandler tak:Jak debugować urllib2 wniosek, który używa podstawowej obsługi uwierzytelniania

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() 

Jestem obecnie dostaniem httplib.BadStatusLine wyjątek podczas wykonywania tego kodu. Jak mogę przejść do debugowania? Czy istnieje sposób sprawdzenia, jaka jest nieprzetworzona odpowiedź, niezależnie od nierozpoznanego kodu statusu HTTP?

Odpowiedz

26

Czy próbowałeś ustawić poziom debugowania we własnej procedurze obsługi HTTP? Zmienić swój kod do czegoś takiego:

>>> 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 

tak więc trzy linie, aby poprzedzić to:

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

To pokaże surowy HTTP cyklu send/odpowiedzi na standardowe wyjście błędów.

Edit z komentarzem

to działa?

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

widziałem wzmiankę gdzieś parametru 'debuglevel' dla' HTTPHandler', ale strona mi komunikować się z potrzeby uwierzytelniania podstawowego, jak i ile wiem 'HTTPBasicAuthHandler' nie posiada debug opcja. Czy mogę coś jeszcze zrobić? Udało mi się znaleźć przyczynę mojego problemu (nieprawidłowe parametry). – Acorn

+0

przypomnieć, że parametry do [urllib2.build_opener()] (http://docs.python.org/library/urllib2.html#urllib2.build_opener) to lista łańcuchów. Możesz oznaczyć swój program do debugowania http na swoim module obsługi auth ... Zobacz przykład. –

+0

Z 'urllib2.build_opener (authhandler, urllib2.HTTPHandler (debuglevel = 1))' Otrzymuję wynik debugowania, ale program obsługi auth nie działa i dostaję '401 nieautoryzowane'. Próbowałem z kolejnością przełączników również (nie jestem pewien, czy to by miało jakąkolwiek różnicę) i zachowanie było takie samo. – Acorn

Powiązane problemy