我正在构建一个Web抓取或爬虫C#.NET应用程序,它不断向服务器发送请求以收集一些信息。问题是,对于此特定服务器的某些网页,Web响应始终是404未找到。然而令人惊讶的是,我发现只要“Fiddler”正在工作,问题就会消失,请求会以成功的响应返回。我一直在网上寻找答案,但没有找到答案。在更光明的一面,在搜索网络并分析Fiddler的时间线功能后,我得出了一些结论。
1.Fiddler使用缓冲模式加载这些网页,而我的应用程序使用Stream模式。 2.似乎Fiddler重用连接,换句话说,Keep-Alive设置为真。
现在问题是我如何模仿或模拟Fiddler在缓冲模式下加载Web响应的方式,以及Fiddler是否实际上做了一些技巧(即修改响应)以获得正确的响应。我正在使用HttpWebRequest和HttpWebResponse来请求我的页面。在将数据返回给客户端(这是我的服务器)之前,我需要一种完全缓冲httpwebresponse的方法。
public static String getCookie(String username,String password) { HttpWebRequest request =(HttpWebRequest)WebRequest.Create(“某些链接”);
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;
}
答案 0 :(得分:0)
您是否尝试过查看HttpWebRequest
的{{1}}财产?您也可以尝试将所有Fiddler的标题附加到您的请求中,尽可能接近Fiddler。
答案 1 :(得分:0)
是不是你的刮刀被检测到并关闭了,Fiddler放慢了它的速度以至于它没有被检测到? http://google-scraper.squabbel.com/