在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;
}
您是否尝试查看HttpWebRequest
的AllowWriteStreamBuffering
属性?此外,您可以尝试将所有Fiddler的标头附加到您的请求中,以尽可能接近Fiddler。
可能是你的刮板被检测和关闭和Fiddler减慢它足够,所以它没有被检测到吗?http://google-scraper.squabbel.com/