我試圖使用Python /機械化登錄到該網頁的網頁: http://www.solaradata.com/cgi-bin/mainProgram.cgi使用Python機械化登錄與JavaScript的MD5散列函數
登錄表單使用了幾個產生MD5哈希Javascript函數字段值,然後提交認證結果。由於機械化不能做JavaScript,我試圖複製python中的相同功能,然後提交結果值。但是,我仍然收到「無效的用戶/密碼」錯誤。
這是我現在的代碼,有人可以指向我出錯的地方嗎?謝謝!
url_login = 'http://www.solaradata.com/cgi-bin/mainProgram.cgi'
import mechanize
import md5
username = 'superfly' #not my real user/pass
password = 'stickyguy' #not my real user/pass
br = mechanize.Browser()
br.open(url_login)
br.select_form(nr=0)
br.set_all_readonly(False)
session = br['session']
br['user'] = username
br['password'] = password
m1 = md5.new()
m1.update(password + username)
br['password'] = m1.digest()
m2 = md5.new()
m2.update(password + session)
br['hash'] = m2.digest()
for form in br.forms():
#print form
request2 = form.click() # mechanize.Request object
try:
response2 = mechanize.urlopen(request2)
except mechanize.HTTPError, response2:
pass
print response2.geturl()
# headers
for name, value in response2.info().items():
if name != "date":
print "%s: %s" % (name.title(), value)
print response2.read() # body
response2.close()
好趕 - 我沒看到這個。調用onSubmit的JavaScript函數實際上相當複雜:函數calcMD5(str){return binl2hex(coreMD5(str2binl(str)))}。 (1)將字符串轉換爲二進制,(2)計算MD5散列,(3)將結果轉換爲base12(十六進制)? – superfly 2010-11-22 20:57:15
這就是我所看到的。跳入螢火蟲,並執行calcMD5(password.value + user.value);和calcMD5(password.value + session.value)看看他們得到了什麼。在程序中使用相同的輸入進行比較。一旦你得到他們相同,你很好去。 – Matt 2010-11-22 21:03:09