一、response.cookies為空
在使用requests庫發送GET或POST請求時,最常見的響應的一部分便是cookies。當然,在有些情況下,可能會出現response.cookies為空的情況。
通常,response.cookies為空有多種原因。例如,請求中沒有cookies;響應中沒有設置cookies;響應的cookies有過期時間,因此被自動丟棄;或者是cookies被瀏覽器禁用了。
需要注意的是,當response.cookies為空時,如果後面的程序依賴於cookies來保存會話狀態,則可能會出錯。請檢查request中是否正確攜帶了cookies,如果cookies被禁用,請確保程序處於正確的用戶態,並且管理員已經允許cookies。
二、response.cookies的參數
response.cookies是一個字典。這個字典的鍵值對應着請求中發送的cookies。其中,鍵是cookie的名稱,值是cookie的值。
需要注意的是,cookies字典中還有其他可選參數,如下所示:
response.cookies = { 'name': value, # cookie的值 'domain': domain, # 發送cookie的域名 'path': path, # cookie的路徑 'expires': expires, # cookie的過期時間 'secure': secure, # 是否只通過 HTTPS 發送cookie 'HttpOnly': httponly # cookie僅發送到服務器端,不讓 JavaScript 獲得 }
這些可選參數並非全部必填,根據實際需要靈活添加即可。
三、response.cookies選取3~5個與response.cookies相關的小標題
1、獲取響應中特定的cookie
在響應中,有時候我們只需要獲取特定的cookie,而非所有的cookies。這時候,我們可以使用response.headers.get()方法,如下所示:
import requests url = 'https://www.example.com' response = requests.get(url) cookie = response.cookies.get('cookie_name') print(cookie)
其中,get()方法接收cookie_name作為參數,返回給定名稱的cookie的值。(如果不存在這樣的cookie,則返回None。)
2、設置響應中的cookie
如果我們需要在響應中設置cookie,可以使用response.cookies.set()方法,如下所示:
import requests url = 'https://www.example.com' cookie = {'name': 'example_cookie', 'value': 'example_value'} response = requests.get(url) response.cookies.set(cookie['name'], cookie['value']) print(response.cookies)
其中,set()方法接收cookie的’name’和’value’作為參數。該方法將創建一個CookieJar對象,並將其賦值給response對象的cookies屬性。
3、將響應中的cookie轉化為目標格式
有時候,我們需要把響應中的cookies轉換成其他格式,比如字符串或JSON格式。這時候,我們可以使用cookies的built-in方法,如下所示:
import requests import json url = 'https://www.example.com' response = requests.get(url) cookie = json.loads(json.dumps([{'name': name, 'value': value} for name, value in response.cookies.items()])) print(cookie)
其中,json.loads(json.dumps())方法被用於將cookie字典轉換成JSON格式。
4、刪除響應中的cookie
在某些情況下,我們需要從響應中刪除cookie。這時候,我們可以使用cookiejar類的discard()方法,如下所示:
import requests url = 'https://www.example.com' response = requests.get(url) response.cookies.clear() print(response.cookies)
其中,clear()方法將清除所有的cookie。如果我們只想刪除特定的cookie,可以使用discard()方法,將需要刪除的cookie的name作為參數。例如:
response.cookies.discard('example_cookie')
5、傳遞響應中的cookie給下一個請求
如果需要將響應中的cookie傳遞給下一個請求,我們只需要將response對象的cookies屬性傳遞給下一個request對象的cookies屬性即可:
import requests url = 'https://www.example.com' response1 = requests.get(url) response2 = requests.get(url, cookies=response1.cookies)
在這個例子中,response1獲得了一個cookie,response2在發起請求時將其傳遞。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/197205.html