Requests 準(zhǔn)備的請求

2022-06-27 15:04 更新

當(dāng)你從 API 或者會(huì)話調(diào)用中收到一個(gè) Response 對象時(shí),?request? 屬性其實(shí)是使用了 ?PreparedRequest?。有時(shí)在發(fā)送請求之前,你需要對 body 或者 header (或者別的什么東西)做一些額外處理,下面演示了一個(gè)簡單的做法:

from requests import Request, Session

s = Session()
req = Request('GET', url,
    data=data,
    headers=header
)
prepped = req.prepare()

# do something with prepped.body
# do something with prepped.headers

resp = s.send(prepped,
    stream=stream,
    verify=verify,
    proxies=proxies,
    cert=cert,
    timeout=timeout
)

print(resp.status_code)

由于你沒有對 Request 對象做什么特殊事情,你立即準(zhǔn)備和修改了 ?PreparedRequest? 對象,然后把它和別的參數(shù)一起發(fā)送到 ?requests.*? 或者 ?Session.*?。

然而,上述代碼會(huì)失去 Requests ?Session? 對象的一些優(yōu)勢, 尤其 ?Session? 級別的狀態(tài),例如 cookie 就不會(huì)被應(yīng)用到你的請求上去。要獲取一個(gè)帶有狀態(tài)的 ?PreparedRequest?, 請用 ?Session.prepare_request()? 取代 ?Request.prepare()? 的調(diào)用,如下所示:

from requests import Request, Session

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

prepped = s.prepare_request(req)

# do something with prepped.body
# do something with prepped.headers

resp = s.send(prepped,
    stream=stream,
    verify=verify,
    proxies=proxies,
    cert=cert,
    timeout=timeout
)

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

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號