在c#中以缓冲模式模拟Fiddler请求

本文关键字:模拟 Fiddler 请求 模式 缓冲 | 更新日期: 2023-09-27 18:09:52

我正在构建一个web抓取或爬虫c# . net应用程序,它不断向服务器发送请求以收集一些信息。问题是,对于这个特定服务器的某些网页,web响应总是404未找到。然而,令人惊讶的是,我发现,只要"Fiddler"工作,问题似乎消失了,请求返回一个成功的响应。我一直在网上寻找答案,但没有找到。好的一面是,在网上搜索并分析了Fiddler的时间轴功能后,我得出了一些结论。

1。Fiddler使用缓冲模式加载这些网页,而我的应用程序使用流模式。2.Fiddler似乎也会重用连接,或者换句话说,Keep-Alive设置为true。

现在的问题是我如何模仿或模拟Fiddler加载web响应的方式缓冲模式,以及Fiddler是否确实做了一些技巧(即修改响应)来获得正确的响应。我使用HttpWebRequest和HttpWebResponse来请求我的页面。我需要一种方法来缓冲httpwebresponse完全之前返回数据到客户端(这是我的服务器)。

公共静态字符串getCookie(字符串用户名,字符串密码){HttpWebRequest请求= (HttpWebRequest)WebRequest。创建("某些链接");

       request.UserAgent = "Mozilla/5.0 (Windows NT 6.0; rv:6.0.2) Gecko/20100101 Firefox/6.0.2";

       request.Credentials = new NetworkCredential(username, password);

       HttpWebResponse wr = (HttpWebResponse)request.GetResponse();
           String y = wr.Headers["Set-Cookie"].ToString();
           return y.Replace("; path=/", "");

   }
   /// <summary>
   /// Requests the html source of a given web page, using the request credentials given.
   /// </summary>
   /// <param name="username"></param>
   /// <param name="password"></param>
   /// <param name="webPageLink"></param>
   /// <returns></returns>
   public static String requestSource(String username,String password,String webPageLink){
       String source = "";
           HttpWebRequest request = (HttpWebRequest)WebRequest.Create(webPageLink);

       if (username != null && password != null)
       {
           request.Headers["Cookie"] = getCookie(username, password);

           request.UserAgent = "Mozilla/5.0 (Windows NT 6.0; rv:6.0.2) Gecko/20100101 Firefox/6.0.2";
           request.Credentials = new NetworkCredential(username, password);
       }
       StreamReader sr;
       using (HttpWebResponse wr = (HttpWebResponse)request.GetResponse())
       {
           sr = new StreamReader(wr.GetResponseStream());
           source = sr.ReadToEnd();
       }

       return source;
   }

在c#中以缓冲模式模拟Fiddler请求

您是否尝试查看HttpWebRequestAllowWriteStreamBuffering属性?此外,您可以尝试将所有Fiddler的标头附加到您的请求中,以尽可能接近Fiddler。

可能是你的刮板被检测和关闭和Fiddler减慢它足够,所以它没有被检测到吗?http://google-scraper.squabbel.com/