Python requests模組cookie例項解析
阿新 • • 發佈:2020-04-15
cookie並不陌生,與session一樣,能夠讓http請求前後保持狀態。與session不同之處,在於cookie資料僅保存於客戶端。requests也提供了相應到方法去處理cookie。
在python requests模組-session中,我們知道了requests中的session物件能夠在請求之間保持cookie,它極大地方便了我們去使用cookie。當我們想設定方法級別中的請求時,可以如下面示例一樣操作。
import requests s = requests.session() # 第一步:傳送一個請求,用於設定請求中的cookies cookies = dict(cookies_are='cookie1') # tips: http://httpbin.org能夠用於測試http請求和響應 r1 = s.get(url='http://httpbin.org/cookies',cookies=cookies) print(r1.text) # 第二步:傳送一個請求,用於再次設定請求中的cookies cookies = dict(cookies_are='cookie2') r2 = s.get(url='http://httpbin.org/cookies',cookies=cookies) print(r2.text)
執行結果
# r1.text { "cookies": { "cookies_are": "cookie1" } } # t2.text { "cookies": { "cookies_are": "cookie2" } }
從結果中可以看出,該方法讓cookie只作用了單個請求,因為方法級別的引數不會被跨請求保持,這是requests中session物件的機制,這裡不再贅述。那麼,如果我們想跨請求保持cookie呢?這裡依舊可以應用session物件的跨請求機制,方法如下:
import requests s = requests.session() s.cookies.update({'cookies_are': 'cookie'}) r = s.get(url='http://httpbin.org/cookies') print(r.text)
值得一提的是,除了直接用字典去賦值cookie之外,requests還提供了RequestsCookieJar物件供我們使用,它的行為類似字典,但介面更為完整,適合跨域名跨路徑使用。來看一個官方文件中的示例。
import requests jar = requests.cookies.RequestsCookieJar() jar.set('tasty_cookie','yum',domain='httpbin.org',path='/cookies') jar.set('gross_cookie','blech',path='/elsewhere') url = 'http://httpbin.org/cookies' r = requests.get(url,cookies=jar) print(r.text)
執行結果
{ "cookies": { "tasty_cookie": "yum" } }
從結果中,可以看出我們利用RequestsCookieJar物件,達到了根據不同請求路徑,傳送不同cookie的效果,進一步增加了操作cookie的靈活性。
參考文件
https://github.com/psf/requests/blob/master/requests/cookies.py
https://requests.readthedocs.io/en/master/user/quickstart/#cookies
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。