Python requests模塊session代碼實例
http協(xié)議本身是無狀態(tài)的,為了讓請求之間保持狀態(tài),有了session和cookie機制。requests也提供了相應的方法去操縱它們。
requests中的session對象能夠讓我們跨http請求保持某些參數(shù),即讓同一個session對象發(fā)送的請求頭攜帶某個指定的參數(shù)。當然,最常見的應用是它可以讓cookie保持在后續(xù)的一串請求中。
下面,通過官方文檔中的示例來了解如何使用它。
import requests
s = requests.Session()
# 第一步:發(fā)送一個請求,用于設置請求中的cookies
# tips: http://httpbin.org能夠用于測試http請求和響應
s.get('http://httpbin.org/cookies/set/sessioncookie/123456789')
# 第二步:再發(fā)送一個請求,用于查看當前請求中的cookies
r = s.get("http://httpbin.org/cookies")
print(r.text)
運行結果
{
"cookies": {
"sessioncookie": "123456789"
}
}
從結果中我們可以看出,第二次請求已經(jīng)攜帶上了第一次請求所設置的cookie,即通過session達到了保持cookie的目的。示例中創(chuàng)建了一個requests.Session()對象,通過該對象來進行http請求操作,該操作基本類似于requests.request()
由于session讓請求之間具有了連貫性,那么,就有了跨請求參數(shù)和非跨請求參數(shù)的區(qū)別。即有時我想讓所有請求均帶有某個參數(shù),而有時我只是想讓單獨的一條請求帶上臨時的參數(shù)。通過下面的例子來了解如何使用。
import requests
s = requests.Session()
s.headers.update({'x-test': 'true'})
# both 'x-test' and 'x-test2' are sent
r1 = s.get('http://httpbin.org/headers', headers={'x-test2': 'true'})
print(r1.text)
# 'x-test' is sent
r2 = s.get('http://httpbin.org/headers')
print(r2.text)
運行結果
# r1.text
{
"headers": {
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate",
"Host": "httpbin.org",
"User-Agent": "python-requests/2.22.0",
"X-Amzn-Trace-Id": "Root=1-5e91656f-b99f14a4d6f47f9e55a90bb4",
"X-Test": "true",
"X-Test2": "true"
}
}
# r2.text
{
"headers": {
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate",
"Host": "httpbin.org",
"User-Agent": "python-requests/2.22.0",
"X-Amzn-Trace-Id": "Root=1-5e91656f-e9741db4c2ca2fd6e0628396",
"X-Test": "true"
}
}
從結果中我們可以得出兩條結論:
session可以為請求方法提供缺省數(shù)據(jù),比如第一次請求中的{'x-test': 'true'}就是缺省數(shù)據(jù),此時的缺省數(shù)據(jù)就是跨請求參數(shù)。
方法級別的參數(shù)不會被跨請求保持,比如第二次請求時,沒有攜帶headers={'x-test2': 'true'},返回的結果中也沒有{'x-test2': 'true'},說明該參數(shù)沒有在第一次請求后被保持住。
參考資料
https://github.com/psf/requests/blob/master/requests/sessions.py
https://requests.readthedocs.io/en/master/user/advanced/#session-objects
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
從零開始學習Python與BeautifulSoup網(wǎng)頁數(shù)據(jù)抓取
想要從零開始學習Python和BeautifulSoup網(wǎng)頁數(shù)據(jù)抓取?本指南將為你提供簡單易懂的指導,讓你掌握這兩個強大的工具,不管你是初學者還是有經(jīng)驗的開發(fā)者,本指南都能幫助你快速入門并提升技能,不要錯過這個機會,開始你的編程之旅吧!2024-01-01
django之使用celery-把耗時程序放到celery里面執(zhí)行的方法
今天小編就為大家分享一篇django之使用celery-把耗時程序放到celery里面執(zhí)行的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-07-07
Python??處理?Pandas?DataFrame?中的行和列
這篇文章主要介紹了Python處理Pandas?DataFrame中的行和列,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下2022-09-09
python3+PyQt5實現(xiàn)自定義流體混合窗口部件
這篇文章主要為大家詳細介紹了python3+PyQt5實現(xiàn)自定義流體混合窗口部件,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-04-04

