如何获取CSRF令牌或通过webbrowser发送POST数据

如何获取CSRF令牌或通过webbrowser发送POST数据,post,login,Post,Login,所以我要做的是登录到一个网站,然后发出一个POST请求。我试着制作一个webbrowser,简单地登录,然后用一个按钮提交POST数据。我不确定它是否不是这样工作的,因为它不是通过webbrowser1发送的,或者因为我没有正确提交POST数据。这是提交POST数据的代码 HttpWebRequest req = (HttpWebRequest) WebRequest.Create("url"); req.Method = "POST";

所以我要做的是登录到一个网站,然后发出一个POST请求。我试着制作一个webbrowser,简单地登录,然后用一个按钮提交POST数据。我不确定它是否不是这样工作的,因为它不是通过webbrowser1发送的,或者因为我没有正确提交POST数据。这是提交POST数据的代码

           HttpWebRequest req = (HttpWebRequest)
        WebRequest.Create("url");
        req.Method = "POST";
        req.ContentType = "application/x-www-form-urlencoded";
        string postData = "postdata";
        req.ContentLength = postData.Length;

        StreamWriter stOut = new
        StreamWriter(req.GetRequestStream(),
        System.Text.Encoding.ASCII);
        stOut.Write(postData);
        stOut.Close();
我还试着只使用一个按钮登录,然后使用另一个按钮,提交此POST数据,但问题是POST请求中需要CSRF令牌。这是我到目前为止所拥有的

            string formUrl = "loginurl"; 
        string formParams = string.Format("username={0}&password={1}&csrfmiddlewaretoken={2}", "user", "pass", "token");
        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"];

这样做的最佳方式是什么?谢谢大家!

您可以尝试绑定到jquery中的“ajax:before”事件,以便在发送之前透明地为CSRF令牌添加一个参数。如何在中添加CSRF令牌取决于您使用的web框架