iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 16
0
自我挑戰組

Why it works: python requests and urllib3系列 第 16

Day16-Requests-The User Guide-Advanced Usage-1

  • 分享至 

  • xImage
  •  

Session Object

很多時候我們不只會發送一次請求,而是多次請求。若需要在當中儲存一些跨請求的狀態資訊時,例如:cookies,可以考慮使用Session Object,同時因為底層urllib3使用了connection pool的關係,不需每次都進行TCP三向交握(3-way-handshake)與TLS交握(TLS-hndshake),進而提升整體效能。

session-level的資料可以跨請求,使用method-level的資料可以複寫該次請求客製化的參數。

Any dictionaries that you pass to a request method will be merged with the session-level values that are set. The method-level parameters override session parameters.

此外,為了確保每次的Session都有被關掉,可以使用context managers的寫法

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

所謂的關掉指得是把更底層所用的Adapter關閉,例如: HTTPAdapter

close()
Closes all adapters and as such the session

Prepared Requests

送出請求後,拿到的Reponse物件內會帶有和該次請求有關的request屬性,內容其實就是Prepared Requests。
有時候若有一些特別的需求,要針對Body或Header進行處理,可以依照是否要用Session的特性生成Prepared Requests

Request.prepare()

req = Request('POST', url, data=data, headers=headers)
prepped = req.prepare()

Session.prepare_request()

s = Session()
req = Request('GET',  url, data=data, headers=headers)

prepped = s.prepare_request(req)

參考


上一篇
Day15-Requests-The User Guide-Quickstart-3
下一篇
Day17-Requests-The User Guide-Advanced Usage-2
系列文
Why it works: python requests and urllib330
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言