使用urllib.request裏時,正確的方法是使用填充有OpenerDirector
一個CookieProcessor
:
cookieProcessor = urllib.request.HTTPCookieProcessor()
opener = urllib.request.build_opener(cookieProcessor)
然後使用opener
,它會自動地處理餅乾:
response = opener.open(request,timeout=100)
默認情況下,CookieJar(http.cookiejar.CookieJar
)用於簡單的內存存儲中,但您可以使用FileCookieJar
在需要長期儲存永久性Cookie,或者如果你想如果你想使用cookies現有的Web瀏覽器中使用存儲在一個cookies.txt
現在傳統的Mozilla格式
持久Cookie甚至http.cookiejar.MozillaCookieJar
,你必須先將它們存儲在一個cookie.txt兼容文件中,並將它們加載到MozillaCookieJar中。對於Mozilla,您可以找到附加組件Cookie Exporter。對於其他瀏覽器,您必須通過在瀏覽器中閱讀您需要的cookie的內容手動創建cookie.txt文件。格式可以在The Unofficial Cookie FAQ找到。提取物:
...每行包含一個名稱 - 值對。 cookie.txt的文件的示例可具有看起來像這樣的條目:每行代表一個單件的存儲的信息
.netscape.com TRUE/FALSE 946684799 NETSCAPE_ID 100103
。每個字段之間插入一個製表符。
由左到右,這裏是每個字段表示:
- 域 - 創建和可讀取可變域。
- flag - 指示給定域中的所有機器是否可以訪問該變量的TRUE/FALSE值。該值由瀏覽器自動設置,具體取決於您爲域設置的值。
- path - 變量有效的域內的路徑。
- secure - 指示是否需要與域進行安全連接來訪問變量的TRUE/FALSE值。 * expiration - 變量將過期的UNIX時間。 UNIX時間定義爲自1970年1月1日00:00:00 GMT以來的秒數。
- name - 變量的名稱。
- value - 變量的值。
但正常方式是模仿一個完整的會話,並從響應自動提取的cookie。 「
該cookie不是標題。所以不要通過它。您最需要查看cookiejar模塊。這不是微不足道的,所以最簡單的方法無疑是使用請求。 –
這不是一個壞的嘗試;讓我強烈鼓勵使用更高級別的庫,該規範是同步代碼的「請求」。 Aaalso,爲什麼'header'變量未被使用?你打算建立一個同時擁有'User-Agent'和'Cookie'字段的頭文件嗎?最後,我建議先用'httpie'命令行嘗試一下。 –