2011-10-08 11 views
18

Sto facendo una richiesta utilizzando urllib2 e HTTPBasicAuthHandler in questo modo:Come eseguire il debug richiesta urllib2 che utilizza un gestore di autenticazione di base

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

Attualmente sto ottenendo un'eccezione httplib.BadStatusLine durante l'esecuzione di questo codice. Come posso fare il debugging? C'è un modo per vedere quale sia la risposta non elaborata indipendentemente dal codice di stato HTTP non riconosciuto?

risposta

26

Hai provato a impostare il livello di debug nel tuo gestore HTTP? Modificare il codice per qualcosa di simile:

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

così i tre linee di anteporre sono:

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

che mostrerà l'HTTP clock di trasmissione/risposta crudo su stderr.

Modifica dal commento

funziona?

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

ho visto una menzione in qualche luogo del parametro '' debuglevel' per HTTPHandler', ma il sito che sto comunicando con le esigenze di autenticazione di base, e per quanto ne so 'HTTPBasicAuthHandler' non ha un debug opzione. C'è qualcos'altro che posso fare? Sono riuscito a trovare la causa del mio problema (parametri errati). – Acorn

+0

ricorda che i parametri di [urllib2.build_opener()] (http://docs.python.org/library/urllib2.html#urllib2.build_opener) sono un elenco di catene. Puoi taggare il tuo gestore HTTP di debug sul tuo gestore di autenticazione ... Vedi esempio. –

+0

Con 'urllib2.build_opener (authhandler, urllib2.HTTPHandler (debuglevel = 1))' Ricevo l'output di debug, ma il gestore di autenticazione non funziona e ottengo un '401 non autorizzato '. Ho provato anche con l'ordine degli handler (non sono sicuro che ciò avrebbe fatto la differenza) e il comportamento era lo stesso. – Acorn

Problemi correlati