2016-10-28 12 views
5

FiddlerCore를 구문 분석하려고하는 사이트에서 이상한 응답이 나타납니다. 크롬 개발자 도구에서 응답을 검사하면 정상적으로 보입니다. 피 들러에서는 그렇지 않습니다. (제대로 작동하는 데 사용) 다음과 같이 코드FiddlerCore가 SDH 응답을 디코딩

String html = oSession.GetResponseBodyAsString(); 

은이 샘플이 아닌 전체 큰 문자열입니다주의, HTML되지 않습니다를 돌려줍니다. 다음과 같이

JRHwJNeR\0���\0\0\u0001��D\0�2�\b\0�\u0016�7]<!DOCTYPE html>\n win\"> 

그것은이

\n\n\n\n\n \n <meta name=\"treeID\" content=\"dwedxE+pgRQAWIHiFSsAAA==\">\n 

응답 헤더와 같은 "\ n을"및 HTML 뒤덮 것입니다 :

Cache-Control:no-cache, no-store 
Connection:keep-alive 
Content-Encoding:sdch, gzip 
Content-Language:en-US 
Content-Type:text/html;charset=UTF-8 
Date:Fri, 28 Oct 2016 10:17:02 GMT 
Expires:Thu, 01 Jan 1970 00:00:00 GMT 
Pragma:no-cache 
Server:Apache-Coyote/1.1 
Set-Cookie:lidc="b=VB87:g=518:u=60:i=1477649823:t=1477731496:s=AQG-LTdly5mcIjAtiRHIOrKE1TiRWW-l"; Expires=Sat, 29 Oct 2016 08:58:16 GMT; domain=.thedomain.com; Path=/ 
Set-Cookie:_lipt=deleteMe; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/ 
Strict-Transport-Security:max-age=0 
Transfer-Encoding:chunked 
Vary:Accept-Encoding, Avail-Dictionary 
X-Content-Type-Options:nosniff 
X-Frame-Options:sameorigin 
X-FS-UUID:882b3366afaa811400a04937a92b0000 
X-Li-Fabric:prod-lva1 
X-Li-Pop:prod-tln1-scalable 
X-LI-UUID:iCszZq+qgRQAoEk3qSsAAA== 
X-XSS-Protection:1; mode=block 

피들러 시작 코드 :

Fiddler.FiddlerApplication.AfterSessionComplete += FiddlerApplication_OnAfterSessionComplete; 
    Fiddler.FiddlerApplication.BeforeResponse += delegate(Fiddler.Session oS) { 
     oS.utilDecodeResponse(); 
    }; 

    Fiddler.FiddlerApplication.Startup(0, FiddlerCoreStartupFlags.Default); 


    } 

처음에는 청크라고 가정했습니다. ed/gzipped 그래서 나는 utilDecodeResponse()를 추가했다; onBeforeResponse는 효과가 없었습니다!

나는 모든 응답을 수동으로 해독하려고 시도했다. UTF-8, Unicode, Bigendian 등의 응답 BreadBytes를 응답 해 보았을 때 응답 내용 유형이 잘못되어 javascript가 비활성화되어 페이지가로드되지 않았다는 것을 ' 어떤 펑키 한 templating thingy도 어떤 차이도 만들지 않았다.

아이디어가 있으십니까?

UPDATE는 다음

& NineBerry 용액 이하 개발자에 의해 제공된 정보와 광고에

그대로 : SDCH 인 반응을 방지하기 위해

는 그렇게 같은 처리기를 추가 인코딩 :

Fiddler.FiddlerApplication.BeforeRequest += delegate (Fiddler.Session oS) 
    { 
     oS.oRequest["Accept-Encoding"] = "gzip, deflate, br"; 
    }; 

SDCH가 있는지 확인한 다음 제거하는 대신 머리글을 수동으로 설정하기 때문에이 방법은 적합하지 않습니다. 하지만 피들러의 일반적인 프록시 기능을 사용하면 더 많은 논리를 원할 것입니다.

+2

콘텐츠 인코딩은'sdch '로 표시됩니다. 도움이 되셨습니까? http://blog.endpoint.com/2009/07/sdch-shared-dictionary-compression-over.html – Developer

+0

Oooo, 흥미로운 문서인데 피들러가 허용 된 인코딩 헤더를 거부/변경할 수 있음 –

+0

나가서 다시 돌아 오면 문제, 게시 및 답변이 될 것이고 나는 잠시 후에 다시 돌아올 것입니다. –

답변

4

콘텐츠 인코딩은 SDCH - Shared Dictionary Compression으로 표시됩니다. UTF-8, Unicode, Bigendian 등에서 수동으로 responseBodyBytes를 디코딩하는 것은이 경우에는 작동하지 않습니다.

는 현재 SDCH에 대한 자세한 내용을 찾을 수 있습니다 - SDCH Ref 1 & SDCH Ref 2

발췌을 위의 사이트에서 :

공유 사전 압축 구글에 의해 2008에 제안 된 콘텐츠 인코딩 방법입니다, Chrome에서 구현되며 여러 Google 서버에서 지원됩니다. 전체 제안은 여기에서 얻을 수 있습니다 - https://lists.w3.org/Archives/Public/ietf-http-wg/2008JulSep/att-0441/Shared_Dictionary_Compression_over_HTTP.pdf. 이 블로그 게시물에있는 문서의 내용을 복제하는 대신 가능한 한 간결하게 요약 해 보겠습니다.
프로토콜의 전체 개념은 HTTP 연결에서 중복성을 줄이는 것입니다. HTTP 응답을 통한 '공통 데이터'의 양은 분명히 중요합니다. 예를 들어 웹 사이트에서 여러 HTML 페이지에서 공통적 인 머리글/바닥 글을 사용하는 경우가 자주 있습니다.클라이언트가이 공통 데이터를 '사전'에 로컬로 저장하는 경우 서버는 클라이언트에 사전을 사용하여 페이지를 재구성하는 방법 만 지시하면됩니다.