2010-09-27 23 views
0

我在這裏有一個實際的問題。 我必須訪問一個網站並獲取cookies信息以在隨後的導航中重複使用它。我沒有任何瀏覽器控件,因爲一切都應該在服務器上運行。 有些網站的任務非常簡單,但有一些網站以我無法截取的方式發回cookie。實踐挑戰:從.net的本網站檢索cookie

示例是Italian highways site:我無法理解他們如何發回cookie,最重要的是,我如何從.Net應用程序捕獲這些cookie。

我都試過WebClient的對象,尋找到頭部,以這樣的方式

var wc = new WebClient(); 
var htmlMainPage = wc.DownloadString(new Uri(AutostradeMainSite)); 
string cookies = wc.ResponseHeaders["Set-Cookie"]; 

,但我沒有得到任何結果。 即使通過查看標題,那裏也沒有cookie。

然後我試着用HttpWebRequest對象,但我沒能檢索餅乾:

HttpWebRequest wr = (HttpWebRequest)HttpWebRequest.Create(AutostradeMainSite); 
wr.Method = "GET"; 
HttpWebResponse response = (HttpWebResponse)wr.GetResponse(); 
var cookies = response.Cookies 

我在做什麼錯?

使用IE或Chrome瀏覽器的一些開發工具分析網站的主頁,我可以看到一些cookie被髮送到瀏覽器,但我看不到它們既不在標題中,也不在javascript中。它可以工作嗎? 在此先感謝您的幫助。

回答

0

雖然創建支持cookie的派生版本非常簡單,但WebClient類無法處理開箱即用的cookies。你可以用HttpWebRequest類做到這一點,但你需要設置CookieContainer屬性:

HttpWebRequest req = WebRequest.Create("http://www.google.com") as HttpWebRequest; 
req.CookieContainer = new CookieContainer(); 
HttpWebResponse res = req.GetResponse() as HttpWebResponse; 
CookieCollection cookies = res.Cookies; 
+0

即使使用HttpWebRequest tecnique,我也嘗試過,正如您從我的帖子中看到的那樣,但沒有任何結果。該網站沒有發回任何cookie,或者它以我無法截取的方式發送。 – themarcuz 2010-09-28 08:38:39

+0

我忘了說...我甚至啓用了Cookie,創建一個新的CookieContainer,正如你所建議的那樣...同樣的結果:沒有檢測到餅乾:( – themarcuz 2010-09-28 08:48:34

+0

嗯,它適用於我...你嘗試過與其他網站嗎?返回2餅乾 – 2010-09-28 09:16:29

0

該網站可檢測到您使用的是未知的「瀏覽器」,並假設你不能接受Cookie,因此它甚至沒有提供一個。答案是製作一個自定義的WebRequest,它看起來像來自IE 8而不是.NET WebClient。您應該可以通過爲WebClient.Headers的User-Agent鍵設置一個值來完成此操作。

+0

試圖遵循你的建議:我加入wr.UserAgent =「Mozilla/4.0(兼容; MSIE 8.0; Windows NT 6.0)「; 但沒有任何變化... 我試過Chrome風格的用戶代理事件,但結果相同:( – themarcuz 2010-09-28 08:39:04