2009-12-08 17 views
10

Tengo una página web que contiene un formulario de inicio de sesión que se carga a través de HTTP, pero envía los datos a través de HTTPS.Mecanizar enviar formulario de inicio de sesión de http a https

Estoy usando python-mechanize para iniciar sesión en este sitio, pero parece que los datos se envían a través de HTTP.

Mi código es se parece a esto:

import mechanize 
b = mechanize.Browser() 
b.open('http://site.com') 
form = b.forms().next() # the login form is unnamed... 
print form.action  # prints "https://login.us.site.com" 
form['user'] = "guest" 
form['pass'] = "guest" 
b.form = form 
b.submit() 

Cuando se envía el formulario, se realiza la conexión a través de HTTP y contiene algo como:

send: 'POST https://login.us.site.com/ HTTP/1.1\r\nAccept-Encoding: identity\r\nContent-Length: 180\r\nHost: login.us.site.com\r\nContent-Type: application/x-www-form-urlencoded\r\n\r\n'... 

Alguien puede confirmar esto y finalmente publicar solución para que el formulario se envíe a través de HTTPS?

Más tarde editar:

1) Estoy usando un proxy HTTP para tráfico HTTP/HTTPS (ajustado en el medio ambiente - máquina Linux)
2) He visto el tráfico con Wireshark y puedo confirmar que el tráfico se envía a través de HTTP normal (puedo ver el contenido del POST y mecanizar no envía las mismas solicitudes al proxy que un navegador web; este último envía CONNECT login.us.site.com:443, mientras que Mechanize solamente POSTS https://login.us.site.com). Sin embargo, no sé qué sucede con los datos cuando sale del proxy; tal vez establece una conexión SSL al sitio de destino?

+0

su forma parece ser presentados a través de HTTPS. – SilentGhost

+1

Para el beneficio de los lectores posteriores: - Es una mala práctica tener una página servida a través de http post en una url https. En configuración predeterminada, IE (por ejemplo) generará una advertencia en tales casos ... Si está bajo su control, debe enviar el formulario desde el mismo nombre de host y protocolo al que se enviará. Esto también le da al usuario el icono de candado tranquilizador. (Es una defensa contra los ataques man-in-the-middle - si el formulario es sobre HTTP, un atacante MIM puede alterar el formulario y puede inyectar javascript para controlar lo que envía a la URL HTTPS). – Ben

Respuesta

2

mechanize usa urllib2 internamente y la última tenía un error: HTTPS over (Squid) Proxy fails. El error está solucionado en Python 2.6.3, por lo que actualizar Python debería resolver su problema.

+0

Si bien ese error parece relacionado, dudo que sea culpa de urllib2, primero porque ejecuto Python 2.6.4 (actualizado en mi distribución de Ubuntu) y segundo porque escribí un programa de prueba que solicitaba https: //www.paypal. com que de hecho envía CONNECT a través del proxy. Parece ser un problema relacionado con mecanizar ... – Unknown

+0

Extraño. Estoy usando urllib2 y puedo urllib2.urlopen la página, pero recibo los mismos errores usando urllib o mecanize. – Vestel

Cuestiones relacionadas