C #은 POST 제출 양식 -HttpWebRequest 및 HttpWebResponse 시뮬레이션

지난번에 WebClient를 사용하여 POST 요청을 제출하는 방법을 소개했는데 이번에는 다른 방법을 계속해서 소개하겠습니다

HttpWebRequest HttpWebResponse


지난번에 소개 한 WebClient와 가장 큰 차이점은 HttpWebRequest가 더 유연하고 강력 하다는 점이라고 생각합니다 . 예를 들어 HttpWebRequestCookies를 지원 하지만 WebClient는 지원 하지 않습니다. 편리합니다.


보충:

WebClient는 쿠키가 기본적으로 문자열이기 때문에 서버에서 반환 된 헤더가 "SetCooie : xxx"인 한 쿠키를 조작 할 수 있으므로 반환 된 형식에 따라 처리됩니다 (그대로 반환 될 수 없습니다. 패킷을 캡처하고 형식을 분석 할 수 있음), 저장하고 HTTP 요청 헤더에 "Cookie : xxx"추가


먼저 Referer와 Cookie를 언급해야합니다.

Referer : 브라우저에서 HTTP 요청을 보낼 때 일반적으로 전달되는 헤더 정보입니다. 클릭 정보, 즉 해당 클릭을 계산하는 데 널리 사용됩니다. 따라서 일부 웹 사이트에서도이 속성을 사용하여 핫 링크를 방지합니다. 많은 경우 , 사진 만있는 경우이 원칙은 내부 커뮤니케이션을 제한하는 데 사용됩니다.

쿠키 : 일부 웹 사이트는 사용자의 신원을 식별하고 세션 추적을 수행하기 위해 사용자의 로컬 터미널에 데이터 (일반적으로 암호화 됨)를 저장합니다. 일반적으로 모든 사람이 로그인 할 때 사용합니다. 로그인 후 웹 사이트는 쿠키를 저장합니다. 로컬 컴퓨터는 귀하가 웹 사이트를 방문 할 때마다이 웹 사이트의 쿠키도 전송하며 서버는이를 사용하여 귀하의 신원을 확인합니다. 이는 중요한 정보이며 일부 해커는 쿠키를 도용하여 귀하의 계정에 침입합니다.


자, 이제 지정하겠습니다.

  1. HttpWebRequest 요청 = (HttpWebRequest) WebRequest.Create ( "POST 요청 주소" );  
  2. request.CookieContainer =  new  CookieContainer ();  
  3. CookieContainer cookie = request.CookieContainer; // 쿠키를 사용하지 않는 경우 삭제  
  4. // 다음은 전송 된 http 헤더입니다. 마음대로 추가합니다. 그 중에서 리퍼러가 매우 중요합니다. 일부 웹 사이트에서는이를 사용하여 핫 링크를 방지합니다.  
  5. request.Referer =“http : //localhost/index.php”;  
  6. request.Accept =  "수락 : text / html, application / xhtml + xml, application / 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 (Gecko와 같은 KHTML) Chrome / 14.0.835.202 Safari / 535.1" ;  
  10. request.KeepAlive =  true ;  
  11. // 위의 http 헤더는 상황에 따라 다르지만 다음 두 개를 추가해야합니다.  
  12. request.ContentType =  "애플리케이션 / x-www-form-urlencoded" ;  
  13. request.Method =  "POST" ;  
  14.   
  15. Encoding encoding = Encoding.UTF8; // 웹 사이트의 인코딩에 따라 사용자 지정  
  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 =  new  StreamReader (responseStream, encoding);  
  30. 문자열  retString = streamReader.ReadToEnd ();  
  31.   
  32. streamReader.Close ();  
  33. responseStream.Close ();  
  34.   
  35. 반환  retString;  


물론, 나는 당신이 다른 사람의 웹 사이트에 해를 끼치는 일을하는 것이 아니라 단지 당신과 지식을 공유하고 있다는 점에 유의하십시오.

반대로 웹 개발자 는 클라이언트가 보낸 데이터가 항상 합법적이라고 믿을 수 없으며 다른 사람이 브라우저를 통해서만 웹 사이트에 액세스 할 수 있다고 가정 할 수 없다는 점을 이해해야 합니다. 위는 예입니다.

예방 조치로 인증 코드 는 대부분의 사람 을 막을 수 있습니다. 인증 코드로 모든 사람을 막을 수 있다고 생각 하지 마세요 . 무슨 일이 있었는지 알고 싶다면 다음에 귀를 기울 이세요.


전송 위치 : http://blog.csdn.net/xizhibei/article/details/6991987

추천

출처blog.csdn.net/hn_tzy/article/details/40976053