Python之requests模塊-cookie


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', domain='httpbin.org', path='/elsewhere')
url = 'http://httpbin.org/cookies'
r = requests.get(url, cookies=jar)
print(r.text)

運行結果

{
  "cookies": {
    "tasty_cookie": "yum"
  }
}

從結果中,可以看出我們利用RequestsCookieJar對象,達到了根據不同請求路徑,發送不同cookie的效果,進一步增加了操作cookie的靈活性。

 

參考文檔

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM