스크립트를 삽입 할 때 Fiddler (FiddlerCore) 응답 작업이 느려짐

fiddler fiddlercore html-agility-pack proxy

문제

내가 fiddlercore와 프록시 서버를 만들려고하면 이벤트 BeforeResponse 코드를 사용하여 매우 느린 작동합니다. 내가 시도한 것은 현재 브라우징 된 페이지의 상단에 스크립트를 삽입하는 것입니다.

왜 코드 아래에 너무 느려서 어떤 종류의 필터를 삽입해야합니까?

Fiddler.FiddlerApplication.BeforeResponse += delegate(Fiddler.Session oS)
        {
            Console.WriteLine("{0}:HTTP {1} for {2}", oS.id, oS.responseCode, oS.fullUrl);

            oS.utilDecodeResponse(); 
            string HTML = oS.GetResponseBodyAsString();

            HtmlDocument htmlDoc = new HtmlDocument();
            try
            {
                htmlDoc.LoadHtml(HTML);
                HtmlNode node = htmlDoc.CreateElement("script");
                node.SetAttributeValue("src", "https://somesite.com");
                HtmlNode Head = htmlDoc.DocumentNode.SelectSingleNode("//Head");

                if (Head != null)
                {
                    Head.AppendChild(node);
                    oS.utilSetResponseBody(htmlDoc.DocumentNode.OuterHtml);
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message.ToString());
            }

            Console.WriteLine("URL: {0}", oS.url);
        };

전체 코드는 다음과 같습니다.

Fiddler.FiddlerApplication.BeforeResponse += delegate(Fiddler.Session oS)
        {
            Console.WriteLine("{0}:HTTP {1} for {2}", oS.id, oS.responseCode, oS.fullUrl);

            oS.utilDecodeResponse(); 
            string HTML = oS.GetResponseBodyAsString();

            HtmlDocument htmlDoc = new HtmlDocument();
            try
            {
                htmlDoc.LoadHtml(HTML);
                HtmlNode node = htmlDoc.CreateElement("script");
                node.SetAttributeValue("src", "https://somesite.com");
                HtmlNode Head = htmlDoc.DocumentNode.SelectSingleNode("//Head");

                if (Head != null)
                {
                    Head.AppendChild(node);
                    oS.utilSetResponseBody(htmlDoc.DocumentNode.OuterHtml);
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message.ToString());
            }

            Console.WriteLine("URL: {0}", oS.url);
        };

수락 된 답변

현재 코드는 모든 HTTP 응답을 압축 해제하여 HTML 문서로 처리하려고합니다. 그것은 분명히 느리고 HTML (이미지 등)이 아닌 모든 것에 실패합니다.

대신 if oS.oResponse.headers.ExistsAndContains("text/html") 만 처리해야합니다. 당신은 GetResponseBodyAsString 이 그것을 처리 할 것이므로 utilDecodeResponse를 수동으로 호출 할 필요가 없습니다. 그리고 HtmlDocument 가 무엇이든 사용하는 대신, </head><script src=whatever.js /></head> 바꾸는 등 문자열 교체를 수행하는 것이 좋습니다.




아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.