[英]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.