Python requests模塊session代碼實(shí)例
http協(xié)議本身是無狀態(tài)的,為了讓請求之間保持狀態(tài),有了session和cookie機(jī)制。requests也提供了相應(yīng)的方法去操縱它們。
requests中的session對象能夠讓我們跨http請求保持某些參數(shù),即讓同一個(gè)session對象發(fā)送的請求頭攜帶某個(gè)指定的參數(shù)。當(dāng)然,最常見的應(yīng)用是它可以讓cookie保持在后續(xù)的一串請求中。
下面,通過官方文檔中的示例來了解如何使用它。
import requestss = requests.Session()# 第一步:發(fā)送一個(gè)請求,用于設(shè)置請求中的cookies# tips: http://httpbin.org能夠用于測試http請求和響應(yīng)s.get(’http://httpbin.org/cookies/set/sessioncookie/123456789’)# 第二步:再發(fā)送一個(gè)請求,用于查看當(dāng)前請求中的cookiesr = s.get('http://httpbin.org/cookies')print(r.text)
運(yùn)行結(jié)果
{ 'cookies': { 'sessioncookie': '123456789' }}
從結(jié)果中我們可以看出,第二次請求已經(jīng)攜帶上了第一次請求所設(shè)置的cookie,即通過session達(dá)到了保持cookie的目的。示例中創(chuàng)建了一個(gè)requests.Session()對象,通過該對象來進(jìn)行http請求操作,該操作基本類似于requests.request()
由于session讓請求之間具有了連貫性,那么,就有了跨請求參數(shù)和非跨請求參數(shù)的區(qū)別。即有時(shí)我想讓所有請求均帶有某個(gè)參數(shù),而有時(shí)我只是想讓單獨(dú)的一條請求帶上臨時(shí)的參數(shù)。通過下面的例子來了解如何使用。
import requestss = requests.Session()s.headers.update({’x-test’: ’true’})# both ’x-test’ and ’x-test2’ are sentr1 = s.get(’http://httpbin.org/headers’, headers={’x-test2’: ’true’})print(r1.text)# ’x-test’ is sentr2 = s.get(’http://httpbin.org/headers’)print(r2.text)
運(yùn)行結(jié)果
# 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' }}
從結(jié)果中我們可以得出兩條結(jié)論:
session可以為請求方法提供缺省數(shù)據(jù),比如第一次請求中的{’x-test’: ’true’}就是缺省數(shù)據(jù),此時(shí)的缺省數(shù)據(jù)就是跨請求參數(shù)。方法級(jí)別的參數(shù)不會(huì)被跨請求保持,比如第二次請求時(shí),沒有攜帶headers={’x-test2’: ’true’},返回的結(jié)果中也沒有{’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)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。
相關(guān)文章:
1. JS中6個(gè)對象數(shù)組去重的方法2. Java commons-httpclient如果實(shí)現(xiàn)get及post請求3. 資深程序員:給Python軟件開發(fā)測試的25個(gè)忠告!4. 一文帶你徹底理解Java序列化和反序列化5. PHP程序員簡單的開展服務(wù)治理架構(gòu)操作詳解(二)6. PHP利用curl發(fā)送HTTP請求的實(shí)例代碼7. Python基于requests庫爬取網(wǎng)站信息8. vscode運(yùn)行php報(bào)錯(cuò)php?not?found解決辦法9. PHP laravel實(shí)現(xiàn)導(dǎo)出PDF功能10. python中文本字符處理的簡單方法記錄

網(wǎng)公網(wǎng)安備