2011-11-23 87 views
2

我知道很多关于HttpWebRequest的问题。但是,我无法找到我遇到的问题的任何答案。HttpWebRequest重定向与饼干

我需要模仿浏览器重定向URL的方式。我的代码工作正常,但不是为下面的网址:

我的代码:

sURL = "http://ad2.adfarm1.adition.com/redi*lid=689397953768/sid=404178/kid=253598/bid=847344/c=33349/keyword=/sr=0/clickurl=&ClickTarget=_blank&"; 
CookieContainer oCookies = new CookieContainer(); 
HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create(sURL); 
myHttpWebRequest.CookieContainer = oCookies; 
myHttpWebRequest.UserAgent = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)";  
myHttpWebRequest.Accept = "text/html, application/xhtml+xml, */*"; 
myHttpWebRequest.Headers["Accept-Language"] = "en-GB"; 
myHttpWebRequest.Headers["Accept-Encoding"] = "gzip, deflate"; 

HttpWebResponse myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse(); 
sNewURL = myHttpWebResponse.GetResponseHeader("Location"); 

提琴手的IE浏览器,请求:

GET http://ad2.adfarm1.adition.com/redi*lid=689397953768/sid=404178/kid=253598/bid=847344/c=33349/keyword=/sr=0/clickurl=&ClickTarget=_blank& HTTP/1.1 
Accept: text/html, application/xhtml+xml, */* 
Accept-Language: en-GB 
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0) 
Accept-Encoding: gzip, deflate 
Connection: Keep-Alive 
Host: ad2.adfarm1.adition.com 
Cookie: fc3=101c3; co=1; UserID1=19177152736; lv_248940=w=470167|t=1321974830; lv_249431=w=125082|t=1321974853; lc_253598=w=404178|t=1321977996 

提琴手的代码,请求:

GET http://ad2.adfarm1.adition.com/redi*lid=689397953768/sid=404178/kid=253598/bid=847344/c=33349/keyword=/sr=0/clickurl=&ClickTarget=_blank& HTTP/1.1 
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0) 
Accept: text/html, application/xhtml+xml, */* 
Accept-Language: en-GB 
Accept-Encoding: gzip, deflate 
Host: ad2.adfarm1.adition.com 
Connection: Keep-Alive 

IE提琴手,回应:

HTTP/1.1 302 Found 
Server: ADITIONSERVER v1.0 
Date: Tue, 22 Nov 2011 17:37:39 +0100 
Connection: close 
Content-Type: text/plain 
Location: &ClickTarget=_blank& 
P3P: policyref="http://imagesrv.adition.com/w3c/p3p.xml",CP="NOI DSP COR NID ADMo OUR NOR COM" 
Set-Cookie: co=1; expires=Wed, 01-Jan-2025 00:00:00 GMT; path=/; domain=.adfarm1.adition.com 
Set-Cookie: UserID1=19177152736; expires=Sun, 20-May-2012 18:37:39 GMT; path=/; domain=.adfarm1.adition.com 
Set-Cookie: lc_253598=w=404178|t=1321979859; expires=Tue, 22-Nov-2011 18:07:39 GMT; path=/; domain=.adfarm1.adition.com 

提琴手通过代码,响应:

HTTP/1.1 302 Found 
Server: ADITIONSERVER v1.0 
Date: Tue, 22 Nov 2011 18:07:39 +0100 
Connection: close 
Content-Type: text/plain 
Location: http://ad2.adfarm1.adition.com:80/redi?co=1&bid=847344&c=33349&keyword=&kid=253598&lid=689397953768&sid=404178&sr=0&clickurl=%26ClickTarget%3D%5Fblank%26 
P3P: policyref="http://imagesrv.adition.com/w3c/p3p.xml",CP="NOI DSP COR NID ADMo OUR NOR COM" 
Set-Cookie: co=1; expires=Wed, 01-Jan-2025 00:00:00 GMT; path=/; domain=.adfarm1.adition.com 

正如你所看到的,我从代码得到了位置值是从IE不同。我从Fiddler可以看到的唯一区别是cookie不会被请求发送。但是,这些cookies来自哪里,我如何设置它们?

非常感谢,

+1

你确保你的IE没有任何cookie,当你想你的要求吗? – Filburt

回答

1

当使用IE浏览器必须已与一个Set-Cookie头回答前一个请求期间保存在您的会议或您的高清它发送的cookie。

如果你想手动设置cookie发送你的初始请求,你会做这样的事情。

CookieContainer oCookies = new CookieContainer(); 
      CookieCollection cookieGroup = new CookieCollection(); 
      Cookie userId = new Cookie("UserID1","19177152736", "/", ".adfarm1.adition.com"); 
      cookieGroup.Add(userId); 
      oCookies.Add(cookieGroup); 

然后像这样将它添加到HTTPWebRequest中。

myHttpWebRequest.CookieContainer = oCookies; 

如果您想要在随后的任何请求中包含cookie,请确保将httpWebRequests CookieContainer设置为oCookies。

0

我认为你不需要设置任何cookie或从你的初始请求发送。

如果你从来没有去过那个URL,你不应该有它的任何cookie。

我已经做了大量的网页抓取通过HttpRequestObject和我记得我从来没有需要设置任何cookie。

您的CookieContainer对象将从第一个响应中填充,您将在将来的请求中使用该对象来维护状态。

我会清除你的缓存并修改你的请求,直到它完全匹配fiddler。

此外,从我所记得的重定向被照顾和捕获的反应。

当我回家后,我会查看一些代码,并发布任何额外的帮助,如果我可以。

  • 乔恩