我正在尝试使用python / mechanize登录此网页: http://www.solaradata.com/cgi-bin/mainProgram.cgi
登录表单使用Javascript函数,该函数在提交结果进行身份验证之前从多个字段值生成MD5哈希值。由于机械化无法执行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()
答案 0 :(得分:1)
使用m1.hexdigest()代替m1.digest()
答案 1 :(得分:0)
我不熟悉python,但看起来他们在算法的javascript版本中返回MD5哈希的十六进制值。 python MD5是否也这样做?
您应该能够在不经过提交流程和测试成功的情况下对此进行测试。相反,使用诸如Firebug或Chrome开发人员工具之类的JavaScript开发人员工具,计算您在页面中获得的结果。然后,使用相同的输入,查看从程序中获得的内容。他们应该匹配,角色的性格。
答案 2 :(得分:0)