我使用HttpWebRequest
和HttpWebResponse
來抓取網站。我爲每個請求使用相同的CookieContainer
,確保cookie自動處理。當Cookie的路徑未設置時CookieCollection問題
但是,其中一個請求需要一個特定的cookie,該cookie是在先前的響應中設置的。雖然這存在於集合中,但其Path
屬性顯示不正確。根據RFC2109(第7頁),當Cookie設置爲空路徑(如本文所述)時,路徑應設置爲請求的URL,但不包括最終斜線。實際發生的情況是,它被設置爲整個 URL路徑,這意味着該cookie不能被相同子域中的不同URL讀取。
一個例子:
- 我在http://www.myserver.com/sub/mypage.php
- 響應請求的頁面包括
Set-Cookie
標頭,讀取的myCookie = 12345; expires = 2012年6月27日星期三16:20:00 GMT - 該Cookie已添加到.NET CookieCollection中。由於沒有路徑設置,路徑爲 的初始化爲/sub/mypage.php
- 我在同一個子域下請求另一個頁面,但需要mycookie cookie,例如, http://www.myserver.com/sub/anotherpage.php
- Cookie不是由.NET提供的,因爲路徑不完全匹配。如果路徑是/分,它會一直擔任正確
我已經執行使用Firefox瀏覽器的Firebug和Firecookie擴展相同的導航步驟。在真實瀏覽器會話中,路徑設置正確,即對子域。
任何人都可以證實這一點,並可能指向我的解決方法或解決此問題?非常感謝。
謝謝,威爾。它看起來像.NET默認cookie的'平原'版本0變種(從原始的Netscape實現),我不知道其實是正確的。我有興趣瞭解Version和CookieVariant在內部是否被重寫,但在那之前我會堅持使用您推薦解決此問題的解決方案。再次感謝! –
該變體通過發送像'mycookie = 12345; expires = Wed,版本= 1,端口= 80'。設置版本會將其設置爲Rfc2109。設置端口將改爲將其設置爲Rfc2965。 – Will