【发布时间】:2013-12-13 02:04:32
【问题描述】:
我正在尝试获取某个网站上的 html 信息,以便解析出我们数据库的信息。问题是第二个和第三个responseFromServer 信息返回相同。但是,当我在真正的网络浏览器中点击链接时,我会得到正确的信息(正确的页面)。
我认为每个 WebRequest 基本上都是在打开网络的“新”实例,而我想要它做的是使用相同的实例。
有没有办法指定(使用 WebClient?),以便每个请求都包含在“同一浏览器”中(因为没有更好的术语)
static void CountyInfo(string Address)
{
WebClient webClient = new WebClient();
webClient.Headers.Add("Cache-Control: private");
webClient.Headers.Add("Content-Type: text/html; charset=utf-8");
webClient.Headers.Add("Server: Microsoft-IIS/6.0");
webClient.Headers.Add("X-AspNet-Version: 4.0.30319");
webClient.Headers.Add("X-Powered-By: ASP.NET");
webClient.Headers.Add("X-UA-Compatible: IE=8, IE=9, IE=10, IE=11");
Address = Address.Replace(" ", "+");
string url1 = "http://mcassessor.maricopa.gov/?s=" + Address;
WebRequest request1 = WebRequest.Create(url1);
WebResponse response1 = request1.GetResponse();
//Stream dataStream1 = response1.GetResponseStream();
Stream dataStream1 = webClient.OpenRead(url1);
StreamReader reader1 = new StreamReader(dataStream1);
string responseFromServer1 = reader1.ReadToEnd();
string ParcelNum = getBetween(responseFromServer1, "http://treasurer.maricopa.gov/parcels/default.asp?Parcel=", "target=");
ParcelNum = new String(ParcelNum.Where(Char.IsDigit).ToArray());
//reader1.Close();
//response1.Close();
//NEW GET request
string url2 = "http://treasurer.maricopa.gov/parcels/default.asp?Parcel=" + ParcelNum;
WebRequest request2 = WebRequest.Create(url2);
WebResponse response2 = request2.GetResponse();
//Stream dataStream2 = response2.GetResponseStream();
Stream dataStream2 = webClient.OpenRead(url2);
StreamReader reader2 = new StreamReader(dataStream2);
string responseFromServer2 = reader2.ReadToEnd();
//reader2.Close();
//response2.Close();
//NEW GET request
string url3 = "http://treasurer.maricopa.gov/Parcel/" + "TaxDetails.aspx?taxyear=2013";
WebRequest request3 = WebRequest.Create(url3);
WebResponse response3 = request3.GetResponse();
//Stream dataStream3 = response3.GetResponseStream();
Stream dataStream3 = webClient.OpenRead(url3);
StreamReader reader3 = new StreamReader(dataStream3);
string responseFromServer3 = reader3.ReadToEnd();
reader3.Close();
response3.Close();
}
编辑:刚刚看到这个。 request1 为我提供了正确的页面(查询结果页面),但请求 2 和 3 将我返回到网站的“主页”。即使我将 url2 和 url3 分别传递到 requests2 和 3 中。
【问题讨论】:
-
唯一与“在同一浏览器中”相关的是发送的请求标头(这包括 cookie)。为什么不下载 fiddler2 并检查从浏览器发送的请求与您的应用程序发送的请求之间的差异?您将能够更好地找出问题所在。
-
好的,我已经这样做了,我将大部分标题添加到代码中,因为它们出现在 Fiddler 中,结果仍然相同。然后我研究了使用产生相同结果的 WebClient 类。还有什么想法吗? (更改在 OP 中)
-
没有人能帮助我吗?
标签: c# .net-3.5 webrequest