會(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 文檔。
更多建議: