c# – .NET HTTP POST方法 – Cookie问题

前端之家收集整理的这篇文章主要介绍了c# – .NET HTTP POST方法 – Cookie问题前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试使用C#登录hotfile.com.第一个大问题是克服417错误,这条线解决了它:
  1. System.Net.ServicePointManager.Expect100Continue = false;

现在,当我尝试使用POST登录时,我收到此错误

You don’t seem to accept cookies. Cookies are required in order to log in. Help

我已经尝试了几次,并且用Google搜索,我仍然无法登录Hotfile.com ..我的代码是这样的:

  1. string response;
  2. byte[] buffer = Encoding.ASCII.GetBytes("user=XX&pass=XX");
  3.  
  4. CookieContainer cookies = new CookieContainer();
  5. HttpWebRequest WebReq = (HttpWebRequest)WebRequest.Create("http://hotfile.com/login.PHP");
  6. WebReq.Credentials = new NetworkCredential("XX","XX");
  7. WebReq.PreAuthenticate = true;
  8. WebReq.Pipelined = true;
  9. WebReq.CookieContainer = cookies;
  10. WebReq.KeepAlive = true;
  11. WebReq.Method = "POST";
  12. WebReq.ContentType = "application/x-www-form-urlencoded";
  13. WebReq.ContentLength = buffer.Length;
  14. WebReq.UserAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1)";
  15.  
  16. Stream PostData = WebReq.GetRequestStream();
  17. PostData.Write(buffer,buffer.Length);
  18. PostData.Close();
  19.  
  20. HttpWebResponse WebResp = (HttpWebResponse)WebReq.GetResponse();
  21. Stream Answer = WebResp.GetResponseStream();
  22. StreamReader _Answer = new StreamReader(Answer);
  23. response = _Answer.ReadToEnd();
  24. File.WriteAllText("dump.html",response);

当然,用户和通行证将拥有您的帐户值.

解决方法

这是我为您写的一个工作示例:
  1. var cookies = new CookieContainer();
  2. ServicePointManager.Expect100Continue = false;
  3.  
  4. var request = (HttpWebRequest)WebRequest.Create("http://www.hotfile.com/login.PHP");
  5. request.CookieContainer = cookies;
  6. request.Method = "POST";
  7. request.ContentType = "application/x-www-form-urlencoded";
  8. using (var requestStream = request.GetRequestStream())
  9. using (var writer = new StreamWriter(requestStream))
  10. {
  11. writer.Write("user=XX&pass=XX&returnto=/");
  12. }
  13.  
  14. using (var responseStream = request.GetResponse().GetResponseStream())
  15. using (var reader = new StreamReader(responseStream))
  16. {
  17. var result = reader.ReadToEnd();
  18. Console.WriteLine(result);
  19. }

猜你在找的C#相关文章