Estoy haciendo una solicitud utilizando urllib2 y la HTTPBasicAuthHandler así:

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

Actualmente estoy recibiendo un httplib.BadStatusLine excepción cuando se ejecuta este código. Cómo se podría ir sobre la depuración? Hay una manera de ver lo que la cruda respuesta es independientemente de la no reconocida de código de estado HTTP?

InformationsquelleAutor Acorn | 2011-10-08

1 Comentario

  1. 27

    Han tratado de establecer el nivel de depuración en su propio controlador HTTP? Cambiar su código para algo como esto:

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

    Para las tres líneas de anteponer son:

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

    Que muestran la cruda HTTP enviar /ciclo de respuesta en stderr.

    Edición de comentario

    Hace este trabajo?

    ... same code as above this line
    opener=urllib2.build_opener(authhandler, urllib2.HTTPHandler(debuglevel=1))
    ... rest of your code
    • Me hizo ver una mención en algún lugar de la debuglevel parámetro para HTTPHandler, pero el sitio me estoy comunicando con las necesidades de la autenticación básica, y que yo sepa HTTPBasicAuthHandler no tiene una opción de depuración. ¿Hay algo más que pueda hacer? He conseguido encontrar la causa de mi problema (misformed parámetros).
    • recordar que los parámetros para urllib2.build_opener() es una lista de cadenas. Puede etiquetar su depuración controlador http en su auth controlador de… Ver ejemplo.
    • Con urllib2.build_opener(authhandler, urllib2.HTTPHandler(debuglevel=1)) puedo conseguir la salida de depuración, pero el auth controlador no funciona y me sale un 401 unauthorised. He probado con el orden de los controladores de conmutación demasiado (no estoy seguro si que haría alguna diferencia) y el comportamiento fue el mismo.
    • También, error común: Muchos sitios necesita el nombre de usuario como user=... y contraseña como password=... por lo que necesita para anteponer las cadenas para el usuario y la contraseña.
    • Uy, mi mal, que no parece estar funcionando! Creo que vi la primera 401 respuesta y no noto el resultado de la autenticación. Gracias! Es autenticar correctamente, y que muestra la salida de depuración.
    • ¿cómo obtengo la respuesta que se imprime en una variable ?
    • Tenga en cuenta que para https, usted necesita para cambiar a urllib2.HTTPSHandler(debuglevel=1)

Dejar respuesta

Please enter your comment!
Please enter your name here