當(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)
更多建議: