2013-10-21 5 views
0

웹 응답의 내용을 읽으려면 어떻게해야합니까? 나는 FiddlerCore를 사용하여 응답을 조사했다. 올바른 요청 및 응답을 분리 할 수 ​​있습니다. 하지만 나는 보내고있는 파일의 헤더만을 얻을 수있다. 나는 그 내용이 필요하다. AfterSessionComplete-method에서는 항상 비어 있습니다. OnReadResponseBuffer-method에는 바이너리 데이터가있는 것 같습니다. 헤더에 표시된대로 gzip 된 것일 수 있습니까? 응답의 내용을 읽는 방법에 대한 아이디어. 피들러를 사용하지 않는 아이디어도 환영합니다. UTF8.GetString()를 사용웹 응답의 내용을 읽으려면 어떻게해야합니까?

void FiddlerApplication_AfterSessionComplete(Fiddler.Session oSession) 
{ 
    listBox1.Invoke(new UpdateUI(() => 
    { 
     if (oSession.PathAndQuery.Contains("mobj.php")) 
     { 
      listBox1.Items.Add(" " + oSession.fullUrl); 
      byte[] body = oSession.ResponseBody; 
      string body_string = System.Text.Encoding.UTF8.GetString(body); // always empty 
     } 
    })); 
} 

static void FiddlerApplication_OnReadResponseBuffer(object sender, RawReadEventArgs e) 
{ 
    string bla = ""; 

    if (e.sessionOwner.fullUrl.Contains("mobj.php")) 
     bla = System.Text.Encoding.UTF8.GetString(e.arrDataBuffer); 
} 
+2

FiddlerCore를 사용해야하는 이유가 있습니까? System.Net.Http.HttpClient를 사용하면 훨씬 간단 해집니다. –

+0

"피들러를 사용하지 않는 아이디어도 환영합니다"- 피들러를 사용하여 실제 요청/응답을 변경하는 경우 해당 객체를 사용하면 어떻게 도움이 될지 모르겠습니다. 하지만 일반적인 웹 스크래핑을하고 있다면 정규 수업이 좋습니다. HTTP 트래픽을보아야하는지 아니면 특정 요청이 특정 응답을 얻는 지 확인해야하는지 명확히하십시오 ('WebClient' 클래스는 쉬운 방법입니다). –

+0

웹 사이트가 동적으로 생성됩니다. 내가 바라는 요청은 자바 스크립트 코드가 URL을 생성 한 후에로드됩니다. 그래서 WebBrowser 컨트롤을 사용하고 피들러를 청취자로 추가하기로했습니다. –

답변

2

콘텐츠 원시 UTF-8 바이트라는 잘못된 가정을 만든다; 그것은 다른 어떤 인코딩일지도 모른다.

대신 oSession.GetResponseBodyAsString() 메서드를 사용해야합니다. 이제 실제로 응답이 본문을 포함하는 경우에만 문자열을 반환한다는 점을 기억하십시오. 예를 들어 HTTP/304 응답 ("캐시에서 버전 재사용"을 의미) 인 경우 본문 바이트가 없습니다. 그러나 HTTP/304 헤더 블록이 해당 기능을 통과하므로 OnReadResponseBuffer이 여전히 계속 발생합니다.

관련 문제