HttpWebRequest 및 HttpWebResponse 사용법 소결

5115 단어
최근 회사의 시장 확장이 매우 빠르다. 몇 주 동안 몇 십 세트의 시스템이 개발되었는데, 시스템 이름은 다르지만 각 내용은 비슷하다.시간이 촉박해서 많은 시스템이 가동되었다
여러 가지 신기한 오류가 발생했습니다. 처음에 기록 오류 로그가 있었지만 많은 고객들이 자신의 서버와 데이터베이스를 사용했습니다. 문제가 생기면 우리는 즉시 정보를 파악할 수 없습니다.
그래서 모든 시스템의 이상을 포착하여 자신의 데이터베이스에 저장하기로 결정했다.
사고방식을 실현하다
각 시스템에서 보고서 오류 코드를 작성합니다(예를 들어 시스템 무료 업그레이드) -> 자체 서버에서 오류 보고서를 수신하고 처리합니다 -> 피드백 사용자(BUG를 해결하면 됩니다. 너무 떠들지 마세요)
기초 회고
--- msdn 참조
1. HttpWebRequest 클래스: WebRequest 클래스를 제공하는 Http의 특정한 실현.
HttpWebRequest 클래스는 WebRequest에 정의된 속성과 방법을 지원하고 사용자가 HTTP를 사용하는 서버와 직접 상호작용할 수 있도록 하는 추가 속성과 방법을 지원합니다.
구조 함수를 사용하여 HttpWebRequest 인스턴스를 만들지 말고 System을 사용하십시오.Net.WebRequest.Create(URI uristring)로 인스턴스를 만듭니다. URI가 Http://또는 Https://,
HttpWebRequest 객체가 반환됩니다.(특정 URI를 요청하는 객체 설정)
리소스에 데이터를 보낼 때 GetRequestStream 메서드는 데이터를 보낼 Stream 객체를 반환합니다.(요청 데이터를 가져오는 흐름 대상)
GetResponse 메서드는 RequestUri 속성에 지정된 리소스에 동기화 요청을 보내고 응답을 포함하는 HttpWebResponse로 돌아갑니다.(인터넷 응답 얻기)
실례 설명
1. 원격 요청 및 응답 복귀
 
  
///
///
///

///
///
public static string Sys_ReportError(Exception ex)
{
try
{
// URI
string uriString = "http://localhost/Sys_ReportError.aspx";
HttpContext context = HttpContext.Current;
if (context == null) return string.Empty;
string targetSite = ex.TargetSite.ToString();
string stackTrace = ex.StackTrace;
string friendlyMsg = ex.Message;
string errorPage = context == null || context.Request == null ? "" : context.Request.Url.ToString();
string projectName = Config.Sys_Title();
//
string postString = "targetSite=" + HttpUtility.UrlEncode(targetSite);
postString += "&stackTrace=" + HttpUtility.UrlEncode(stackTrace);
postString += "&friendlyMsg=" + HttpUtility.UrlEncode(friendlyMsg);
postString += "&errorPage=" + HttpUtility.UrlEncode(errorPage);
postString += "&projectName=" + HttpUtility.UrlEncode(projectName);
postString += "&key=" + "";
HttpWebRequest webRequest = null;
StreamWriter requestWriter = null;
string responseData = "";
webRequest = System.Net.WebRequest.Create(uriString) as HttpWebRequest;
webRequest.Method = "POST";
webRequest.ServicePoint.Expect100Continue = false;
webRequest.Timeout = 1000 * 60;
webRequest.ContentType = "application/x-www-form-urlencoded";
//POST the data.
requestWriter = new StreamWriter(webRequest.GetRequestStream());
try
{
requestWriter.Write(postString);
}
catch (Exception ex2)
{
return " ";
}
finally
{
requestWriter.Close();
requestWriter = null;
}
responseData = WebResponseGet(webRequest);
webRequest = null;
return responseData;
}
catch
{
return " ";
}
}
 
  
///
/// Process the web response.
///

/// The request object.
/// The response data.
public static string WebResponseGet(HttpWebRequest webRequest)
{
StreamReader responseReader = null;
string responseData = "";
try
{
responseReader = new StreamReader(webRequest.GetResponse().GetResponseStream());
responseData = responseReader.ReadToEnd();
}
catch
{
return " ";
}
finally
{
webRequest.GetResponse().GetResponseStream().Close();
responseReader.Close();
responseReader = null;
}
return responseData;
}

2. 원격 서버 읽기 흐름
 
  
_context = HttpContext.Current;
Stream stream = _context.Request.InputStream; // Http
long length = stream.Length;
byte[] data = _context.Request.BinaryRead((int)length);//
string strContent = Encoding.UTF8.GetString(data);// UTF8

코드 설명은 여기서 끝납니다.
1. HttpWebRequest 객체에는 Method(전송 방식), Time Out(요청 시간 초과), ContentType(Http 헤더의 값) 등 관련 설정 속성이 있습니다.
2. 원격 수신 페이지에서 오류가 발생하면 어떻게 디버깅해야 하는지 간단합니다. 다음 코드만 쓰십시오.
 
  
HttpWebResponse res = null;
WebResponse response = null;
try
{
WebResponse response = webRequest.GetResponse();
}
catch (WebException ex1)
{
res = (HttpWebResponse)ex1.Response;
}
finally
{
StreamReader sr = new StreamReader(res.GetResponseStream(), Encoding.UTF8);
string strhtml = sr.ReadToEnd();
HttpContext.Current.Response.Write(strhtml);
}

서버 응답을 가져오는 중 오류가 발생했을 때 오류를 포착하여 오류를 출력하면 됩니다.

좋은 웹페이지 즐겨찾기