2011-11-23 82 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。

此外,從我所記得的重定向被照顧和捕獲的反應。

當我回家後,我會查看一些代碼,併發布任何額外的幫助,如果我可以。

  • 喬恩