2017-08-09 152 views
1

我在此处从HTTPWebRequest获取WebResponseC#WebRequest-HTTP:403 Forbidden(POST中缺少'_xsrf'参数)

WebRequest.GetResponse()方法抛出一个WebException ("500 Internal Server Error")。当我看到返回的HTML它说:

HTTP 403:禁止( '_xsrf' 的说法,从POST失踪)

任何人都知道此错误或知道什么林做错了什么?

(IM试图登录到网站使用POST)

编辑: 我的源代码:

 private String GetLoginCookies(String pHTTPurl, String pUserIDwithFormID, String pPasswordWithFormID) 
    { 
    String loginPageUrl = pHTTPurl; 
    CookieContainer cookieContainer = new CookieContainer(); 
    var Request = (HttpWebRequest)WebRequest.Create(loginPageUrl); 
    Request.CookieContainer = cookieContainer; 
    Request.Method = "GET"; 

    WebResponse Response = Request.GetResponse(); 

    HttpWebResponse HttpResponse = Response as HttpWebResponse; 

    CookieCollection cookies = null; 
    if (HttpResponse != null) 
    { 
     //Cookies die benötigt werden um den Loginvorgang abzuschließen 
     cookies = HttpResponse.Cookies; 
    } 

    string formParams = string.Format(pUserIDwithFormID + "&" + pPasswordWithFormID); 


    Request = (HttpWebRequest)WebRequest.Create(loginPageUrl); 
    Request.CookieContainer = cookieContainer; 
    Request.UserAgent = "I am not a Bot! Ok maybe.."; 
    WebResponse resp = null; 
    Request.ContentType = "application/x-www-form-urlencoded"; 
    Request.Method = "POST"; 
    byte[] bytes = Encoding.ASCII.GetBytes(formParams); 
    Request.ContentLength = bytes.Length; 
    using (Stream os = Request.GetRequestStream()) 
    { 
     os.Write(bytes, 0, bytes.Length); 
    } 
    try 
    { 
     resp = Request.GetResponse(); 
     using (StreamReader sr = new StreamReader(resp.GetResponseStream())) 
     { 
      String TestResponse = sr.ReadToEnd(); 
     } 
    } 
    catch (WebException WE) 
    { 
     DebugConsole.AppendText("HTTP Error:" + WE.Message + Environment.NewLine); 
     String HTML = new StreamReader(WE.Response.GetResponseStream()).ReadToEnd(); 
     DebugConsole.AppendText(HTML); 
     return null; 
    } 
    String cookieHeader = resp.Headers["Set-cookie"]; 
    if (String.IsNullOrEmpty(cookieHeader)) 
     return null; 
    else 
     return cookieHeader; 
    } 
+0

就像它说的那样。这可能是进一步的帮助:https://stackoverflow.com/questions/42408177/what-is-the-difference-between-x-xsrf-token-and-x-csrf-token – Orangesandlemons

回答

2

其实,这是因为Web方法需要防CSRF(跨站请求伪造,更多信息在这里:https://www.owasp.org/index.php/Cross-Site_Request_Forgery_(CSRF))验证参数。你可以做什么,是对CSRF值追加到请求头:

postHeaders.Add("X-CSRFToken", CSRF); 

也许你可以,如果你需要任何帮助,在这里贴上您的源代码,所以我们可以照顾它

0

OK !找到解决方案

获得登录站点的响应后,请在"Set-cookie"标头中搜索_xsrf。这是您必须在下一个POST请求的标题中放入的令牌。

+0

excatly!对不起,我没有回复你,不在线。如果我的回答对你有帮助,你可以将它作为回答:) –

+0

没问题。感谢您的帮助! – BMS