Python 将提交登录表单从http机械化为https

Python 将提交登录表单从http机械化为https,python,forms,post,https,mechanize,Python,Forms,Post,Https,Mechanize,我有一个网页,其中包含一个通过HTTP加载的登录表单,但它通过HTTPS提交数据 我正在使用PythonMechanize登录这个站点,但是数据似乎是通过HTTP提交的 我的代码如下所示: import mechanize b = mechanize.Browser() b.open('http://site.com') form = b.forms().next() # the login form is unnamed... print form.action # print

我有一个网页,其中包含一个通过HTTP加载的登录表单,但它通过HTTPS提交数据

我正在使用PythonMechanize登录这个站点,但是数据似乎是通过HTTP提交的

我的代码如下所示:

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()
提交表单时,通过HTTP建立连接,并包含以下内容:

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'...
有人能确认这一点并最终发布解决方案,以便通过HTTPS提交表单吗

稍后编辑:

1) 我正在使用HTTP代理进行HTTP/https通信(在环境-Linux机器中设置)

2) 我用Wireshark观察了流量,我可以确认流量是通过正常的HTTP发送的(我可以看到帖子的内容,mechanize不会向代理发送与webbrowser相同的请求,后者发送CONNECT login.us.site.com:443,而mechanize只发送帖子)。但是,我不知道数据离开代理时会发生什么情况;也许它建立了到目标站点的ssl连接

mechanize
在内部使用
urlib2
,后者有一个错误:。Python2.6.3中修复了该缺陷,因此更新Python应该可以解决您的问题。

好的,这似乎是mechanize中的一个缺陷


您的表单似乎是通过HTTPS提交的。为了方便以后的读者:-将页面通过http post发送到HTTPS url是不好的做法。在默认配置中,IE(例如)将在这种情况下生成警告。。。。如果它在您的控制之下,您应该使用与提交表单相同的主机名和协议提供表单。这也为用户提供了令人放心的挂锁图标。(这是对中间人攻击的防御——如果表单是通过HTTP的,MIM攻击者可以更改表单,并可以注入javascript来控制您提交到HTTPS URL的内容)。虽然这个错误看起来确实相关,但我怀疑这是urllib2的错,首先是因为我运行的是python 2.6.4(在我的Ubuntu发行版中是最新的)第二个原因是我编写了一个测试程序,请求通过代理发送CONNECT。所以这似乎是一个与机械化有关的问题……奇怪。我使用的是urllib2,并且能够urllib2.URL打开页面,但是我使用urllib或mechanize收到相同的错误。