在通过C#模拟网页登录时,是否需要发布每个请求标头?

时间:2018-02-28 16:04:28

标签: c# http

我正在努力获取登录页面背后的信息,并使用this作为我的起点。

查看网络选项卡,我查看了表单数据,发现除了客户端/密码(csrf,time,hash)之外还有3个附加值。

我尝试按如下方式登录网站。

string formUrl = "mysite_loginaction"; 
string formParams = string.Format("client_id={0}&password={1}", "client", "password");
string cookieHeader;
WebRequest req = WebRequest.Create(formUrl);
req.ContentType = "application/x-www-form-urlencoded";
req.Method = "POST";
byte[] bytes = Encoding.ASCII.GetBytes(formParams);
req.ContentLength = bytes.Length;
using (Stream os = req.GetRequestStream())
{
    os.Write(bytes, 0, bytes.Length);
}
WebResponse resp = req.GetResponse();
cookieHeader = resp.Headers["Set-cookie"];

当我将resp打印到我的控制台时,它显示我的登录页面,当我在登录后期待下一页(谷歌2f页)。

我是否还需要发布csfrtimehash值才能成功登录?

2 个答案:

答案 0 :(得分:1)

就像链接中提到的那样,有一个sessionid令牌的概念。如果您确实希望保持登录状态,则需要每次为以下http请求传递该令牌。

此外,每次执行请求时,CSRF令牌总是不同,但您需要在下次请求时将其传递给成功。

要了解有关CSRF的更多信息,我应该将您重定向到this link

答案 1 :(得分:0)

你将不得不搞砸它。大多数情况下,您不需要所有标题,但我认为需要hash