System.Net.HttpWebRequest抓取aspx页面,为什么每次抓取的Html内容都一样?
aspx页中的内容由session条件控制,循环改变每个Session值,来改变aspx页中的内容,可是不知道为什么若个Html的文件内容都一样? --------------------编程问答-------------------- 应该是你用这个模拟访问的方法的请求头不服胡对方的请求格式吧,你要模拟一下浏览器的请求 --------------------编程问答-------------------- 模拟一下浏览器?麻烦能说的详细些吗? --------------------编程问答-------------------- 这就好像你每次都用一个全新的机器去访问网站一样,你的请求没有维系cookie,从而也就没有维系SessionID——每一次访问都创建一个新的会话。 --------------------编程问答-------------------- http://www.google.cn/search?q=httpwebrequest+cookiecontainer&rls=com.microsoft:zh-cn:IE-SearchBox&ie=UTF-8&oe=UTF-8&sourceid=ie7大体上可以参考这些:http://www.google.cn/search?q=httpwebrequest+cookiecontainer&rls=com.microsoft:zh-cn:IE-SearchBox&ie=UTF-8&oe=UTF-8&sourceid=ie7 --------------------编程问答-------------------- http://www.google.cn/search?q=httpwebrequest+cookiecontainer&rls=com.microsoft:zh-cn:IE-SearchBox&ie=UTF-8&oe=UTF-8&sourceid=ie7这个例子有些繁琐,每次改变Cookie的值,都要抓取页面两次 --------------------编程问答-------------------- 这样程序的效率好像有点低了吧 --------------------编程问答-------------------- 用CookieContainer来保存第一次抓取时候的Cookie,第二次...第N次的时候把这个Cookie附带动就行了. --------------------编程问答-------------------- httwebrequest模拟用户登录
延迟抓取页面数据 --------------------编程问答-------------------- 你是怎么循环改变每个Session的?
每次发起一个请求,服务器认为是一个新的请求,每次的Session确实都不一样,但是这也是针对第一次访问,后面要想让服务器知道你是同一个客户端,则需要保持Cookie(这个要看服务器是怎么维持Session的)。 --------------------编程问答-------------------- Session的值我是通过循环来设定的,比如从1到5,Session的我分别设定为1,2,3,4,5,在设定Session的值时,Session值的改变,会影响到aspx页的内容,我就是想通过Session值的不同,来抓取不同的aspx内容。
所以在改在Session值时,我同时去抓取aspx内容,结果抓取下的内容每次都是第一个Session值的内容。
--------------------编程问答-------------------- 我之所以说那个抓取两次的效率低,是因为我要不停的改变session的值。 --------------------编程问答--------------------
用CookieContainer数组来分别保存不就行了吗?提交的时候判断是提交的哪一个cookie --------------------编程问答-------------------- 用CookieContainer数组来分别保存不就行了吗?提交的时候判断是提交的哪一个cookie
[/Quote]
我不会写。。。。 --------------------编程问答--------------------
CookieContainer[] arrCC;
Thread[] arrThread;
arrCC = new CookieContainer[intSelectedCount];
arrThread = new Thread[intSelectedCount];
for (int j = 0; j < intSelectedCount; j++)
{
Application.DoEvents();
arrCC[j] = sub.LoginSite("网址", "参数");
if (arrCC[j]!=null)
{
//MessageBox.Show(arrCC[j].ToString());
arrclsThread[j] = new clsThread(arrRowIndex[j], arrProvinceID[j], intAddMinutes, intSelectedCount, j, arrCC[j]);
arrThread[j] = new Thread(arrclsThread[j].doCatch);
arrThread[j].Start();
}
}
补充:.NET技术 , C#