¿Cómo ve los encabezados de solicitud que mecaniza está utilizando?

Estoy intentando enviar algunos datos a un formulario programáticamente. Tengo un pequeño problema por el cual al servidor no le gusta lo que le estoy enviando. Frustrantemente, no hay mensajes de error, o cualquier cosa que pueda ayudar a diagnosticar el problema, todo lo que hace es volver a la misma página en la que empecé cuando br.submit() .

Cuando hago clic en el botón Enviar manualmente en el navegador, la página resultante muestra un pequeño “¡éxito!” mensaje. No aparece tal mensaje cuando se envía a través del script. Además, no se están publicando cambios en el servidor. Es bastante extraño, y la primera vez que me he encontrado con este comportamiento.

Examinando a través de los documentos de Mechanize, sugiere que bajo estos problemas extraños y difíciles de diagnosticar, que es mejor copiar los encabezados de solicitud que realmente son enviados por el navegador.

Mi pregunta es, ¿cómo veo cuáles son los encabezados de solicitud cuando llamo a br.submit() ?

Código de muestra

 location = 'http://ww.mysite.com' br = mechanize.Browser() cj = mechanize.LWPCookieJar() br.set_cookiejar(cj) username = MY_USER_NAME password = MY_PASSWORD br.addheaders.append(('Authorization', 'Basic %s' % base64.encodestring('%s:%s' % (username, password)))) br.open(location) br.select_form(nr=0) br['text'] = 'MY JUNK TO SUBMIT' #Text field. Can put anything br['DropDown1'] = ['4'] #This is a dropdown of integer values br['DropDown2'] = ['3'] #Also a dropdown of ints br.submit() 

¿Cómo veo qué encabezados se envían cuando envío el formulario?

¿Está preguntando cómo ver qué encabezados está enviando su navegador o mecanismo?


Navegador

Al igual que los otros comentaristas, usted puede verificar los encabezados enviados por los navegadores con un complemento como Firebug (Firefox), Herramientas de desarrollador (IE ‘F12’ , Herramientas de desarrollador de Chrome y Opera Dragonfly ), etc.


Mecanizar

Con mecanizar puede obtener una copia de los encabezados enviados haciendo algo como

 import mechanize br = mechanize.Browser() br.open("http://stackoverflow.com") request = br.request request.header_items() 

Lo que da en este caso.

 [('Host', 'stackoverflow.com'), ('User-agent', 'Python-urllib/2.7')] 

Otro / Uno apagado

Como siempre para una depuración única o si no se proporciona nada, entonces puede usar Wireshark para verificar qué encabezados se han enviado a través de la red. Consejo : use un filtro como (http.request.uri == "http://stackoverflow.com/")