J'essaie d'utiliser python/mécaniser pour vous connecter à cette page: http://www.solaradata.com/cgi-bin/mainProgram.cgiUtilisation de mécaniser python pour se connecter sur la page web avec la fonction javascript hash md5
Le formulaire de connexion utilise une fonction Javascript qui produit un hachage MD5 de plusieurs valeurs de champ avant de soumettre les résultats pour l'authentification. Comme mechanize ne peut pas faire javascript, j'ai essayé de reproduire la même fonctionnalité à l'intérieur de python et ensuite soumettre les valeurs résultantes. Cependant, je reçois toujours des erreurs "utilisateur/mot de passe invalide".
Voici mon code actuel, quelqu'un peut-il me diriger vers où je me suis trompé? Merci!
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()
bonne prise - je n'ai pas vu ça. La fonction JavaScript appelée onSubmit est en fait assez compliquée: function calcMD5 (str) {return binl2hex (coreMD5 (str2binl (str)))}. Est-ce que j'ai bien lu que c'est (1) convertir la chaîne en binaire, (2) calculer le hachage MD5, et (3) convertir le résultat en base12 hex? – superfly
Voilà ce que cela me semble. Sautez dans firebug et exécutez calcMD5 (password.value + user.value); et calcMD5 (password.value + session.value) pour voir ce qu'ils obtiennent. Utilisez les mêmes entrées dans votre programme pour comparer. Une fois que vous les obtenez identiques, vous êtes prêt à partir. – Matt
J'ai regardé la conversion des trois fonctions javascript dans la page (str2binI, coreMD5, binI2hex) et essayé de les convertir en python, mais ils sont au-delà de ma compréhension de javascript :( – superfly