我正在尝试创建一个小脚本,该脚本可以让您自动登录到php网站。 当我查看通过https发送的POST脚本时,我意识到有一个包含哈希字符串的隐藏输入表单(在登录表单中以CSS可见性隐藏),该表单正在使用电子邮件+密码在数据表单中发送 示例:
login=USERNAME&passwort=PASSWORD&loginhash=1b9f29d68152619b469c3744de3a1f54
实际上,我实际上需要在发布之前执行简单的GET操作以解析出字符串,然后使用loginhash进行POST,但是如何保持该连接有效而又不会获得不再匹配的新哈希? / p>
//GET
WebRequest req = WebRequest.Create(url);
WebResponse resp = req.GetResponse();
using (StreamReader sr = new StreamReader(resp.GetResponseStream()))
{
reqHtml = sr.ReadToEnd();
}
cookieHeader = resp.Headers["Set-cookie"];
//Parsing html and storing to var loginhash
//POST
string formData = string.Format("login={0}&loginhash={1}&passwort={2}", "USERNAME", loginhash, "PASSWORD");
req.ContentType = "application/x-www-form-urlencoded";
req.Method = "POST";
req.Headers.Add("Cookie", cookieHeader);
byte[] bytes = Encoding.ASCII.GetBytes(formData);
req.ContentLength = bytes.Length;
using (Stream os = req.GetRequestStream())
{
os.Write(bytes, 0, bytes.Length);
}
using (StreamReader sr = new StreamReader(resp.GetResponseStream()))
{
pageSource = sr.ReadToEnd();
}
意识到,我的理论实际上是错误的,因为我发送了两个带有curl的GET,因此curl会在之前进行管道处理/重用连接。最后,回应中还有两个不同的哈希值。也许哈希只是一种干扰?