Python?Requests使用Cookie的幾種方式詳解
前言
這篇文章將總結(jié) Python Requests庫(kù)中接口請(qǐng)求時(shí)使用Cookie的幾種方式,文章使用 Postman 官網(wǎng)提供的接口進(jìn)行演示 https://postman-echo.com
一、通過(guò)headers參數(shù)使用
通過(guò)headers參數(shù)使用cookie,key為Cookie,值為使用;拼接的 cookie_name=cookie_value 字符串
import requests get_url = "https://postman-echo.com/get" # key為Cookie,值為使用;拼接的 cookie_name=cookie_value 字符串 headers = {"Cookie":"cka=111a;ckb=111b"} res = requests.get(url=get_url,headers=headers) print(res.json().get("headers").get("cookie")) print(res.request.headers.get("Cookie"))
輸出如下:
cka=111a;ckb=111b
cka=111a;ckb=111b
二、通過(guò)cookies參數(shù)使用
通過(guò)cookies參數(shù)使用cookie,cookies 值以字典形式提供,key為cookie_name,value為cookie_value
import requests get_url = "https://postman-echo.com/get" # cookies 以字典形式提供,cookies 值以字典形式提供,key為cookie_name,value為cookie_value cookies = {"cka":"222a","ckb":"222b"} res = requests.get(url=get_url,cookies=cookies) print(res.json().get("headers").get("cookie")) print(res.request.headers.get("Cookie"))
輸出:
cka=222a; ckb=222b
cka=222a; ckb=222b
注意:同時(shí)通過(guò)headers,cookies 參數(shù)傳遞Cookie時(shí),只有headers傳遞的Cookie有效。
三、通過(guò)Session會(huì)話使用
通過(guò)Session會(huì)話管理Cookie,同一會(huì)話的多個(gè)請(qǐng)求可共享Cookie;
在Session中添加Cookie又有多種方式
方式0:自動(dòng)設(shè)置
在會(huì)話過(guò)程中,如果有接口響應(yīng)頭中有 set-cookie,則將自動(dòng)添加到會(huì)話的Cookie中
import requests session = requests.session() print("會(huì)話初始cookie:",dict(session.cookies)) get_url = "https://postman-echo.com/get" res = session.get(url=get_url) print("響應(yīng)頭中set-cookie:",res.headers.get("set-cookie")) print("會(huì)話現(xiàn)有cookie:",dict(session.cookies))
輸出:
會(huì)話初始cookie: {}
響應(yīng)頭中set-cookie: sails.sid=s%3ALo1-iQfueg8z1DhR_SX3KxwWA85cYN65.asZ1elFlT9g54uj%2FHkHpaZFkk0rBaCFDtRrA9anWzY4; Path=/; HttpOnly
會(huì)話現(xiàn)有cookie: {'sails.sid': 's%3ALo1-iQfueg8z1DhR_SX3KxwWA85cYN65.asZ1elFlT9g54uj%2FHkHpaZFkk0rBaCFDtRrA9anWzY4'}
方式1:通過(guò)key設(shè)置
直接通過(guò)key設(shè)置cookie,但不支持設(shè)置cookie的 path、domain 等值
import requests session = requests.session() print("會(huì)話初始cookie:",dict(session.cookies)) # 直接通過(guò)key設(shè)置cookie,但不支持設(shè)置cookie的 path、domain 等值 session.cookies["cka"]="111a" session.cookies["ckb"]="111b" get_url = "https://postman-echo.com/get" res = session.get(url=get_url) print("本次請(qǐng)求使用的cookie:",res.request.headers.get("Cookie")) print("會(huì)話現(xiàn)有cookie:",dict(session.cookies))
輸出:
會(huì)話初始cookie: {}
本次請(qǐng)求使用的cookie: cka=111a; ckb=111b
會(huì)話現(xiàn)有cookie: {'cka': '111a', 'ckb': '111b', 'sails.sid': 's%3AxtcEChogQfCYrRm9HDwAOFa4VlQQDsCZ.OR1TBpmuhX%2F2qI7mpTE0NdChrphD5AUcvcRqUF2y6NU'}
方式2:通過(guò)set 方法設(shè)置
通過(guò)set方法設(shè)置cookie,且支持設(shè)置path、domain等值
import requests session = requests.session() print("會(huì)話初始cookie:",dict(session.cookies)) # 通過(guò)set方法設(shè)置cookie,且支持設(shè)置path、domain等值 session.cookies.set("ck2","222",path="/",domain="postman-echo.com") get_url = "https://postman-echo.com/get" res = session.get(url=get_url) print("本次請(qǐng)求使用的cookie:",res.request.headers.get("Cookie")) print("會(huì)話現(xiàn)有cookie:",session.cookies)
輸出:
會(huì)話初始cookie: {}
本次請(qǐng)求使用的cookie: ck2=222
會(huì)話現(xiàn)有cookie: <RequestsCookieJar[<Cookie ck2=222 for postman-echo.com/>, <Cookie sails.sid=s%3AZW2JtlIjc1m9D2vVrn1Io57gVB6lVQiK.SjYcItCh92iqDkVF7oI8C6q5P8KmQ5DwB%2BiD4A6Ag48 for postman-echo.com/>]>
注意:<Cookie ck2=222 for postman-echo.com/>
可以看出 設(shè)置的 path、domain 成功了
方式3:通過(guò) add_dict_to_cookiejar 方法設(shè)置
通過(guò) requests.utils 工具包里的 add_dict_to_cookiejar 方法設(shè)置cookie,但不支持設(shè)置 path、domain 等值
import requests session = requests.session() print("會(huì)話初始cookie:",dict(session.cookies)) # 通過(guò) requests.utils 工具包里的 add_dict_to_cookiejar 方法設(shè)置cookie,但不支持設(shè)置 path、domain 等值 cookie_dict = {"ck3a":"333a","ck3b":"333b"} requests.utils.add_dict_to_cookiejar(session.cookies,cookie_dict=cookie_dict) get_url = "https://postman-echo.com/get" res = session.get(url=get_url) print("本次請(qǐng)求使用的cookie:",res.request.headers.get("Cookie")) print("會(huì)話現(xiàn)有cookie:",dict(session.cookies))
輸出:
會(huì)話初始cookie: {}
本次請(qǐng)求使用的cookie: ck3a=333a; ck3b=333b
會(huì)話現(xiàn)有cookie: {'ck3a': '333a', 'ck3b': '333b', 'sails.sid': 's%3AFY_7nq-hA_v9BxPaft4BHgRNiZOmDZ1S.N64IaIZ2Dd2fnfDMawbXdmJl0HfUVN7hhhGrdaFE4Bs'}
方式4:通過(guò) RequestsCookieJar() 對(duì)象設(shè)置
創(chuàng)建一個(gè)空 RequestsCookieJar()對(duì)象,然后使用對(duì)象的set方法賦值,然后update更新到當(dāng)前會(huì)話cookie,支持設(shè)置 path、domain等值
import requests session = requests.session() print("會(huì)話初始cookie:",dict(session.cookies)) # 創(chuàng)建一個(gè)空 RequestsCookieJar()對(duì)象,然后使用對(duì)象的set方法賦值,然后update更新到當(dāng)前會(huì)話cookie,支持設(shè)置 path、domain等值 ckj = requests.sessions.RequestsCookieJar() ckj.set('ck4a', '444a', path='/', domain='postman-echo.com') session.cookies.update(ckj) get_url = "https://postman-echo.com/get" res = session.get(url=get_url) print("本次請(qǐng)求使用的cookie:",res.request.headers.get("Cookie")) print("會(huì)話現(xiàn)有cookie:",dict(session.cookies))
輸出:
會(huì)話初始cookie: {}
本次請(qǐng)求使用的cookie: ck4a=444a
會(huì)話現(xiàn)有cookie: {'ck4a': '444a', 'sails.sid': 's%3ANU88BiSVQAFpVUtrvSrii14jOhO_q981.MfJkY7Aw93R0Rc4V6JGi7SXPOneNJTr3p%2FNVJ9yp4Qg'}
方式5:通過(guò) cookiejar_from_dict 方法設(shè)置
通過(guò) requests.utils 工具包里的 cookiejar_from_dict 方法將字典格式的cookie轉(zhuǎn)換為cookiejar對(duì)象,然后update更新到當(dāng)前會(huì)話,不支持設(shè)置 path、domain 等值
import requests session = requests.session() print("會(huì)話初始cookie:",dict(session.cookies)) # 通過(guò) requests.utils 工具包里的 cookiejar_from_dict 方法將字典格式的cookie轉(zhuǎn)換為cookiejar對(duì)象,然后update更新到當(dāng)前會(huì)話,不支持設(shè)置 path、domain 等值 cookie_dict = {"ck5a":"555a","ck5b":"555b"} ckj5 = requests.utils.cookiejar_from_dict(cookie_dict=cookie_dict) session.cookies.update(ckj5) get_url = "https://postman-echo.com/get" res = session.get(url=get_url) print("本次請(qǐng)求使用的cookie:",res.request.headers.get("Cookie")) print("會(huì)話現(xiàn)有cookie:",dict(session.cookies))
輸出:
會(huì)話初始cookie: {}
本次請(qǐng)求使用的cookie: ck5a=555a; ck5b=555b
會(huì)話現(xiàn)有cookie: {'ck5a': '555a', 'ck5b': '555b', 'sails.sid': 's%3AWHa__ab1vTZVjGdlIpDgDFfntSYNqS2Y.y%2Fq4YhPv49C5jwNiYdVWrFsQm9B0Y202rI5xRrqlwsk'}
總結(jié)
到此這篇關(guān)于Python Requests使用Cookie的幾種方式的文章就介紹到這了,更多相關(guān)Python Requests使用Cookie內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python中淺拷貝copy與深拷貝deepcopy的簡(jiǎn)單理解
今天小編就為大家分享一篇關(guān)于Python中淺拷貝copy與深拷貝deepcopy的簡(jiǎn)單理解,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2018-10-10python 爬取百度文庫(kù)并下載(免費(fèi)文章限定)
這篇文章主要介紹了python 爬取百度文庫(kù)并下載的示例,幫助大家更好的理解和學(xué)習(xí)python 爬蟲(chóng)的相關(guān)知識(shí),感興趣的朋友可以了解下2020-12-12利用Python腳本生成sitemap.xml的實(shí)現(xiàn)方法
最近項(xiàng)目中需要用腳本生成sitemap,中間學(xué)習(xí)了一下sitemap的格式和lxml庫(kù)的用法。把結(jié)果記錄一下,方便以后需要直接拿來(lái)用。下面這篇文章主要介紹了利用Python腳本生成sitemap.xml的實(shí)現(xiàn)方法,需要的朋友可以參考借鑒,一起來(lái)看看吧。2017-01-01利用Python實(shí)現(xiàn)批量打包程序的工具
auto-py-to-exe與pyinstaller都無(wú)法直接一次性打包多個(gè)程序,想打包多個(gè)程序需要重新操作一遍。所以本文將用Python實(shí)現(xiàn)批量打包程序的工具,感興趣的可以了解一下2022-07-07Python調(diào)用服務(wù)接口的實(shí)例
今天小編就為大家分享一篇Python調(diào)用服務(wù)接口的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-01-01Django在視圖中使用表單并和數(shù)據(jù)庫(kù)進(jìn)行數(shù)據(jù)交互的實(shí)現(xiàn)
本文主要介紹了Django在視圖中使用表單并和數(shù)據(jù)庫(kù)進(jìn)行數(shù)據(jù)交互,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07基于Python的PIL庫(kù)學(xué)習(xí)詳解
這篇文章主要介紹了基于Python的PIL庫(kù)學(xué)習(xí)詳解,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-05-05