1 回答

TA贡献1796条经验 获得超4个赞
看起来https://inspire.flg360.co.uk/SignIn.php页面发送的实际 POST 请求 还有一些需要的元素。也就是说,POST 数据实际上看起来像:
strForwardURL=&strEmail=abc%40123.com&intRememberMe=1&strResponse=fdb4c46c5d0eeab6133be193afc7897e
这些字段是strForwardURL,strEmail,intRememberMe,和strResponse。查看页面上的其余代码,当您单击提交按钮时,它会触发页面上的这段 javascript:
function fncSignIn() {
var loginForm = document.getElementById("signinForm");
if (loginForm.strEmail.value == "") {
alert("Please enter your email address.");
return false;
}
if (loginForm.strPassword.value == "") {
alert("Please enter your password.");
return false;
}
var submitForm = document.getElementById("submitForm");
submitForm.strEmail.value = loginForm.strEmail.value;
if (loginForm.intRememberMe.checked) submitForm.intRememberMe.value = 1;
submitForm.strResponse.value = hex_md5(loginForm.strChallenge.value+hex_md5(loginForm.strPassword.value));
submitForm.submit();
}
在页面的其他地方,您可以在strChallenge此处找到字符串:
<input type="hidden" name="strChallenge" value="1d989603e448a1a0559f08bdc83a15522fbc6c0404ca66acc4cdd7aafe4039359e2fb23b706d60a3">
(顺便说一下,这个值在重新加载时会发生变化)
本质上,它要求strChallenge字符串的 md5 十六进制摘要与密码的 md5 十六进制摘要连接,而不是字符串形式的密码。
在python中,它会是这样的:
import hashlib
password = "abcdefg12345"
strc = "1d989603e448a1a0559f08bdc83a15522fbc6c0404ca66acc4cdd7aafe4039359e2fb23b706d60a3"
strc_joined = strc + hashlib.md5(password.encode("utf-8")).hexdigest()
strresponse = hashlib.md5(strc_joined.encode("utf-8")).hexdigest()
print(strresponse)
本例中的输出为 0d289f39067a25430d4818fe38046372
将原始请求中的 postdata 变为:
{"strForwardURL":"", "strEmail":"abc@123.com", "intRememberMe": 1, "strResponse": "0d289f39067a25430d4818fe38046372"}并且您应该能够登录。每次您想抓取需要此特定登录的页面时,您应该能够简单地strChallenge使用 BeautifulSoup4抓取,计算正确的strResponse,然后登录。
添加回答
举报