Requests 會(huì)話對(duì)象

2022-06-27 14:44 更新

會(huì)話對(duì)象讓你能夠跨請(qǐng)求保持某些參數(shù)。它也會(huì)在同一個(gè) Session 實(shí)例發(fā)出的所有請(qǐng)求之間保持 ?cookie?, 期間使用 urllib3 的 ?connection pooling? 功能。所以如果你向同一主機(jī)發(fā)送多個(gè)請(qǐng)求,底層的 TCP 連接將會(huì)被重用,從而帶來(lái)顯著的性能提升。

會(huì)話對(duì)象具有主要的 Requests API 的所有方法。

我們來(lái)跨請(qǐng)求保持一些 ?cookie?:

s = requests.Session()

s.get('http://httpbin.org/cookies/set/sessioncookie/123456789')
r = s.get("http://httpbin.org/cookies")

print(r.text)
# '{"cookies": {"sessioncookie": "123456789"}}'

會(huì)話也可用來(lái)為請(qǐng)求方法提供缺省數(shù)據(jù)。這是通過(guò)為會(huì)話對(duì)象的屬性提供數(shù)據(jù)來(lái)實(shí)現(xiàn)的:

s = requests.Session()
s.auth = ('user', 'pass')
s.headers.update({'x-test': 'true'})

# both 'x-test' and 'x-test2' are sent
s.get('http://httpbin.org/headers', headers={'x-test2': 'true'})

任何你傳遞給請(qǐng)求方法的字典都會(huì)與已設(shè)置會(huì)話層數(shù)據(jù)合并。方法層的參數(shù)覆蓋會(huì)話的參數(shù)。

不過(guò)需要注意,就算使用了會(huì)話,方法級(jí)別的參數(shù)也不會(huì)被跨請(qǐng)求保持。下面的例子只會(huì)和第一個(gè)請(qǐng)求發(fā)送 ?cookie? ,而非第二個(gè):

s = requests.Session()

r = s.get('http://httpbin.org/cookies', cookies={'from-my': 'browser'})
print(r.text)
# '{"cookies": {"from-my": "browser"}}'

r = s.get('http://httpbin.org/cookies')
print(r.text)
# '{"cookies": {}}'

如果你要手動(dòng)為會(huì)話添加 ?cookie?,就使用 ?Cookie utility? 函數(shù) 來(lái)操縱 ?Session.cookies?。

會(huì)話還可以用作前后文管理器:

with requests.Session() as s:
    s.get('http://httpbin.org/cookies/set/sessioncookie/123456789')

這樣就能確保 ?with? 區(qū)塊退出后會(huì)話能被關(guān)閉,即使發(fā)生了異常也一樣。

從字典參數(shù)中移除一個(gè)值

有時(shí)你會(huì)想省略字典參數(shù)中一些會(huì)話層的鍵。要做到這一點(diǎn),你只需簡(jiǎn)單地在方法層參數(shù)中將那個(gè)鍵的值設(shè)置為 ?None? ,那個(gè)鍵就會(huì)被自動(dòng)省略掉。

包含在一個(gè)會(huì)話中的所有數(shù)據(jù)你都可以直接使用。學(xué)習(xí)更多細(xì)節(jié)請(qǐng)閱讀 會(huì)話 API 文檔。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)