1. 程式人生 > >如何在requests session中手動設定cookie

如何在requests session中手動設定cookie

最近工作中在使用python requests庫時遇到一個問題,就是如何在session中設定對所有請求都生效的cookie?requests中的session物件一大特性就是它會自動為你管理cookie,當你登入一個頁面時,它可以自動識別response中的set cookie頭,然後為下面的請求一直維持這個cookie。不過我在使用的過程中,因為目標網站登入有驗證碼,所以打算每次執行時手動登入頁面獲取cookie,然後再把cookie寫到程式碼變數中。這裡遇到的問題就是當在get函式中傳入cookie變數時,cookie只對當前的請求進行生效,下一次呼叫get還需要再傳入一次cookie,否則發出去的請求是預設不會帶有cookie的。

如下:

import requests
import time

mycookie = { "PHPSESSID":"56v9clgo1kdfo3q5q8ck0aaaaa" }
x = requests.session()
x.get("http://127.0.0.1:80",cookies = mycookie)
time.sleep(5)
x.get("http://127.0.0.1:80")

執行指令碼後,通過抓包發現,第一次get請求的中含有我自定義的cookie,第二次請求中卻沒有。因為我要對很多http介面傳送請求,所以如果在每個get裡面都加入一個cookie變數的話,寫起來就有些麻煩了。於是google了一下,找到了如下的解決方法:
import requests
import time

mycookie = { "PHPSESSID":"56v9clgo1kdfo3q5q8ck0aaaaa" }
x = requests.session()
requests.utils.add_dict_to_cookiejar(x.cookies,{"PHPSESSID":"07et4ol1g7ttb0bnjmbiqjhp43"})
x.get("http://127.0.0.1:80",cookies = mycookie)
time.sleep(5)
x.get("http://127.0.0.1:80")

這樣,通過requests.utils.add_dict_to_cookiejar對session物件設定cookie,之後所有的請求都會自動加上我自定義的cookie內容。

也可以通過requests.utils.cookiejar_from_dict 先生成一個cookiejar物件,時候在賦值給session.cookies。貌似還可以使用session.cookies.set()或者update()。