2013-11-22 6 views
0

기술적으로 나는 VB를 작성하는 친구에 대해 질문하고 있지만 더 많은 사람들이 있기 때문에 C#으로 게시합니다. 그리고 저는 개인적으로도 알지 못합니다.WebRequest에서 헤더 가져 오기

그는 그가 자신의 웹 페이지를 ASP.net으로로드하는 누군가를 대신하여 연결하는 방식으로 서비스로 모바일 백엔드에 연결하는 것을 돕고 있습니다.

파이썬을 사용하여 서비스에 연결하고 있습니다. 그러나 그는 422 서버 응답을 얻고있다. 나는 그의 것과 내 사이의 내용 차이 & 요청 헤더를 비교하고 싶다.

아래의 Chris Doggett의 post on this page에 따르면 요청이 실제로 전송 될 때까지 머리글을 가져올 수 없습니다. 그러나 request.GetResponse()이 호출되자 마자 Visual Studio (또는 Express는 확실하지 않음)가 중단 점에서 중단되고 브라우저에 422 오류 및 일부 오류 메시지가 표시됩니다. 따라서 그는 헤더를 인쇄 할 다음 줄로 갈 수 없습니다.

두 질문 :

디버깅의 어떤 종류가 켜져
  1. 않았다고? 그럼에도 불구하고 422 응답이 응답이고 프로그램이 멈추지 않아야한다고 생각했습니다.
  2. 머리글뿐만 아니라 내용을 어떻게 인쇄합니까? 가급적이면 전체 요청을 텍스트로 인쇄하고 싶습니다. JSON에서 보낸 이러한 것들이 있으며 헤더에 속한다고 생각하지 않지만 확실하지는 않습니다.

답변

3

Create 방법은 HTTP/HTTPS URL에 대한 HttpWebRequest를 반환합니다. 422 status code은 잘못된 형식의 데이터를 서버에 보내는 중임을 나타냅니다. 상태 코드 200을받지 못하기 때문에 GetResponse()WebException이됩니다.

는 예외 내가 볼

private static void Main(string[] args) 
{ 
    WebRequest request = WebRequest.Create("http://google.com/12345"); //generate 404 

    try 
    { 

     WebResponse response = request.GetResponse(); 
    } 
    catch(WebException ex) 
    { 
     HttpWebResponse errorResponse = ex.Response as HttpWebResponse; 

     if (errorResponse == null) 
      throw; //errorResponse not of type HttpWebResponse 

     string responseContent = ""; 

     using(StreamReader r = new StreamReader(errorResponse.GetResponseStream())) 
     { 
      responseContent = r.ReadToEnd(); 
     } 

     Console.WriteLine("The server at {0} returned {1}", errorResponse.ResponseUri, errorResponse.StatusCode); 

     Console.WriteLine("With headers:"); 
     foreach(string key in errorResponse.Headers.AllKeys) 
     { 
      Console.WriteLine("\t{0}:{1}", key, errorResponse.Headers[key]); 
     } 

     Console.WriteLine(responseContent); 
    } 

    Console.ReadLine(); 
} 
+0

을 처리 할 필요가 응답의 실제 헤더를 얻으려면. 예외를 던지면 흥미 롭습니다. 감사. :) – huggie

+0

실제로 응답 헤더 대신 요청 헤더를 알고 싶습니다. (그래서 내가 보낸 것을 비교할 수 있습니다.)하지만 예외를 잡는 방법을 아는 것이 좋은 출발입니다. – huggie

+0

헤더는'request' 객체 (실제로'HttpWebRequest')를 통해 사용할 수 있어야합니다. [이 MSDN 페이지] (http://msdn.microsoft.com/en-US/library/system.net.httpwebrequest.headers (v = vs.110) .aspx)에 헤더를 가져 오는 예제가 있습니다. – ChrisK