C # simular formulario de envío POST-HttpWebRequest y HttpWebResponse

La última vez, presenté el uso de WebClient para enviar solicitudes POST . Esta vez, continuaré presentando otro método

HttpWebRequest y HttpWebResponse


Creo que la mayor diferencia con el WebClient introducido la última vez es que HttpWebRequest es más flexible y potente. Por ejemplo, HttpWebRequest admite cookies , pero WebClient no. Por lo tanto, si tiene que iniciar sesión en un sitio web determinado para realizar determinadas operaciones, HttpWebResponse Viene muy bien.


suplemento:

WebClient puede manipular cookies, porque una cookie es esencialmente una cadena, siempre que el encabezado devuelto por el servidor sea "SetCooie: xxx", por lo que se procesará de acuerdo con el formato devuelto (no se puede devolver tal como está, usted puede capturar el paquete y analizar el formato), guardarlo y agregar "Cookie: xxx" al encabezado de la solicitud HTTP


Antes que nada, debemos mencionar Referer y Cookie

Referer : Es la información del encabezado que generalmente se lleva al enviar solicitudes Http en el navegador. Se usa mucho para contar la información de los clics, es decir, desde ese clic. Por lo tanto, algunos sitios web también usan esta propiedad para evitar hotlinking. En muchos casos , si la imagen es solo Este principio se utiliza para restringir la comunicación interna.

Cookie : algunos sitios web almacenan datos en el terminal local del usuario (generalmente encriptados) para identificar la identidad del usuario y realizar un seguimiento de la sesión. Por lo general, todos lo usarán al iniciar sesión. Después de iniciar sesión, el sitio web almacenará una cookie. En el computadora local, cada vez que visite un sitio web, también enviará la cookie de este sitio web, y el servidor la utilizará para confirmar su identidad. Es un dato importante y algunos piratas informáticos se entrometerán en su cuenta robando cookies.


Bien, ahora especifiquemos:

  1. Solicitud HttpWebRequest = (HttpWebRequest) WebRequest.Create ( "Dirección de solicitud POST" );  
  2. request.CookieContainer =  new  CookieContainer ();  
  3. CookieContainer cookie = request.CookieContainer; // Si no se utilizan cookies, elimínelas  
  4. // El siguiente es el encabezado http enviado, agréguelo a voluntad, entre los cuales el referente es muy importante, algunos sitios web lo usarán para evitar hotlinking  
  5. request.Referer = "http: //localhost/index.php";  
  6. request.Accept =  "Aceptar: texto / html, aplicación / xhtml + xml, aplicación / xml; q = 0.9, * / *; q = 0.8" ;  
  7. request.Headers [ "Accept-Language" ] =  "zh-CN, zh; q = 0." ;  
  8. request.Headers [ "Accept-Charset" ] =  "GBK, utf-8; q = 0.7, *; q = 0.3" ;  
  9. request.UserAgent =  "User-Agent: Mozilla / 5.0 (Windows NT 5.1) AppleWebKit / 535.1 (KHTML, como Gecko) Chrome / 14.0.835.202 Safari / 535.1" ;  
  10. request.KeepAlive =  true ;  
  11. // El encabezado http anterior depende de la situación, pero se deben agregar los dos siguientes  
  12. request.ContentType =  "application / x-www-form-urlencoded" ;  
  13. request.Method =  "POST" ;  
  14.   
  15. Encoding encoding = Encoding.UTF8; // Personalizar según la codificación del sitio web  
  16. byte[] postData = encoding.GetBytes(postDataStr);//postDataStr即为发送的数据,格式还是和上次说的一样  
  17. request.ContentLength = postData.Length;  
  18. Stream requestStream = request.GetRequestStream();  
  19. requestStream.Write(postData, 0, postData.Length);  
  20.   
  21. HttpWebResponse response = (HttpWebResponse)request.GetResponse();  
  22. Stream responseStream = response.GetResponseStream();  
  23. //如果http头中接受gzip的话,这里就要判断是否为有压缩,有的话,直接解压缩即可  
  24. if (response.Headers["Content-Encoding"] != null && response.Headers["Content-Encoding"].ToLower().Contains("gzip"))  
  25. {  
  26.     responseStream = new GZipStream(responseStream, CompressionMode.Decompress);  
  27. }  
  28.   
  29. StreamReader streamReader =  nuevo  StreamReader (responseStream, codificación);  
  30. cadena  retString = streamReader.ReadToEnd ();  
  31.   
  32. streamReader.Close ();  
  33. responseStream.Close ();  
  34.   
  35. return  retString;  


Por supuesto, tenga en cuenta que solo estoy compartiendo el conocimiento con usted, no para que haga cosas que dañen los sitios web de otras personas.

Por el contrario, como desarrollador web, también debe comprender que no puede creer que los datos enviados por el cliente sean siempre legales y no puede asumir que otros solo pueden acceder al sitio web a través de un navegador.

Como precaución, los códigos de verificación pueden evitar que la mayoría de las personas. Simplemente, no crea que puede evitar que todos los que tengan códigos de verificación. Si desea saber qué sucedió, escuche la próxima vez.


Transferencia desde: http://blog.csdn.net/xizhibei/article/details/6991987

Supongo que te gusta

Origin blog.csdn.net/hn_tzy/article/details/40976053
Recomendado
Clasificación