2009-12-08 85 views
10

我有一個包含通過HTTP加載的登錄表單的網頁,但它通過HTTPS提交數據。機械化從http提交登錄表單到https

我正在使用python-mechanize登錄到這個網站,但它似乎是通過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/HTTPS流量HTTP代理(在環境中設置 - Linux機器)
2)我看過流量使用Wireshark,我可以確認流量是通過普通的HTTP發送的(我可以看到POST的內容,機械化不會像webbrowser一樣向代理髮送相同的請求 - 後者發送CONNECT login.us.site.com:443,而僅僅機械化職位https://login.us.site.com)。但是,我不知道數據在離開代理時會發生什麼,也許它建立了一個到目標站點的ssl連接?

+0

您的形式,似乎通過HTTPS提交。 – SilentGhost

+1

爲了以後的讀者的利益: - 不好的做法是將一個頁面通過http post發送到https url。在默認配置中,IE(例如)會在這種情況下產生一個警告。如果它在您的控制之下,您應該提交與提交時相同的主機名和協議。這也爲用戶提供了令人放心的掛鎖圖標。 (這是對中間人攻擊的防禦 - 如果表單是通過HTTP,MIM攻擊者可以改變表單並且可以注入JavaScript來控制你提交給HTTPS URL的內容)。 – Ben

回答

2

mechanize內部使用urllib2內部和後來有一個錯誤:HTTPS over (Squid) Proxy fails。這個bug在Python 2.6.3中得到解決,所以更新Python應該可以解決你的問題。

+0

雖然這個bug確實看起來有關係,但我懷疑它是urllib2的錯,首先是因爲我運行python 2.6.4(在我的Ubuntu發行版中是最新的),其次是因爲我寫了一個請求https://www.paypal的測試程序。 com確實通過代理髮送CONNECT。 所以它似乎是一個有關機械化的問題.. – Unknown

+0

奇怪。我使用urllib2並能夠urllib2.urlopen頁面,但我收到使用urllib或機械化相同的錯誤。 – Vestel