簡體   English   中英

使用HttpWebRequest登錄到網站Fshare總是錯誤400

[英]login to Website Fshare with HttpWebRequest always error 400

我使用HttpWebRequest登錄網站Fshare.vn。 我使用實時HTTP標頭插件firefox來捕獲登錄參數。 我調試了一下,發現我的登錄參數與瀏覽器登錄相同,但是HttpWebRequest.GetResponse()總是拋出錯誤400錯誤的請求。 我嘗試使用捕獲的瀏覽器登錄參數,但始終拋出錯誤400。

這是我的代碼

請幫我! 謝謝大家! 字符串網址=“ https://www.fshare.vn/login ”;

string myParameters = string.Format("fs_csrf={0}&LoginForm%5Bemail%5D={1}&LoginForm%5Bpassword%5D={2}&LoginForm%5BrememberMe%5D=1&yt0=%C4%90%C4%83ng+nh%E1%BA%ADp",fs_csrf, System.Net.WebUtility.UrlEncode(userName),System.Net.WebUtility.UrlEncode(passWorld));
            br.sendDataPost(myParameters);

public string sendDataPost(string myParameters)
    {
        CookieContainer cookie = new CookieContainer();
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(URI);
        request.Method = "POST";
        request.ContentType = "application/x-www-form-urlencoded";
        request.Referer = URI;
        request.UserAgent = "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0";
        string postData = myParameters;
        request.KeepAlive = true;
        request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8";
        //request.Headers.Add("accept","text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8");
        //request.Headers.Add("accept-encoding","gzip, deflate");
        //request.Headers.Add("accept-language","en-US,en;q=0.8,zh-CN;q=0.6,zh;q=0.4,vi;q=0.2");
        request.KeepAlive = false;
        request.SendChunked = true;
        request.AutomaticDecompression=DecompressionMethods.GZip;
        request.ProtocolVersion = HttpVersion.Version11;
        request.AllowAutoRedirect = true;
        byte[] bytes = Encoding.UTF8.GetBytes(postData);
        request.CookieContainer = cookies;
        request.ContentLength = bytes.Length;
        request.Proxy = proxy;

        Stream requestStream = request.GetRequestStream();
        requestStream.Write(bytes, 0, bytes.Length);
        request.AllowAutoRedirect = false;
        request.ProtocolVersion = HttpVersion.Version11;
       // requestStream.Close();

        WebResponse response = request.GetResponse();
        Stream stream = response.GetResponseStream();
        StreamReader reader = new StreamReader(stream);

        var result = reader.ReadToEnd();
        stream.Dispose();
        reader.Dispose();
        return result.ToString();
    }

這是如何使其工作(經過測試)的方法:

public string sendDataPost()
        {
            string url = "https://www.fshare.vn/login";
            string fsCsrf = "";
            Regex regEx = new Regex(@"<input type=""hidden"" value=""(.*)"" name=""fs_csrf"" \/>");

            CookieContainer cookie = new CookieContainer();
            HttpWebRequest initialRequest = (HttpWebRequest)WebRequest.Create(url);            
            initialRequest.CookieContainer = cookie;            
            HttpWebResponse getCookiesResponse = (HttpWebResponse)initialRequest.GetResponse();
            using (StreamReader sr = new StreamReader(getCookiesResponse.GetResponseStream()))
            {
                string responseHtml = sr.ReadToEnd();
                Match match = regEx.Match(responseHtml);
                if (match.Groups.Count > 1)
                    fsCsrf = match.Groups[1].Value;
            }

            if (!string.IsNullOrEmpty(fsCsrf))
            {
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
                request.Method = "POST";
                request.ContentType = "application/x-www-form-urlencoded";                                                                
                request.CookieContainer = cookie;

                string username = "user";
                string password = "pass";
                string postData = "fs_csrf=" + fsCsrf + "&LoginForm%5Bemail%5D=" + username + "&LoginForm%5Bpassword%5D=" + password + "&LoginForm%5BrememberMe%5D=0&yt0=%C4%90%C4%83ng+nh%E1%BA%ADp";                                

                using (Stream requestStream = request.GetRequestStream())
                using (StreamWriter requestStreamWriter = new StreamWriter(requestStream))
                {                    
                    requestStreamWriter.Write(postData);
                    requestStreamWriter.Flush();
                    WebResponse response = request.GetResponse();                    

                    using (Stream stream = response.GetResponseStream())
                    using (StreamReader reader = new StreamReader(stream))
                    {
                        var result = reader.ReadToEnd();
                        return result;
                    }
                }                
            }

            return null;
        }

基本上,我注意到服務器將一些值與您的會話相關聯,並等待該值在您的后續帖子中返回。 該值存儲在名為fs_csrf的隱藏輸入中,您必須將其與其他數據一起發布,並確保會話ID也保留在您的請求中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM