當你從 API 或者會話調用中收到一個 Response 對象時,?request
? 屬性其實是使用了 ?PreparedRequest
?。有時在發(fā)送請求之前,你需要對 body 或者 header (或者別的什么東西)做一些額外處理,下面演示了一個簡單的做法:
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 對象做什么特殊事情,你立即準備和修改了 ?PreparedRequest
? 對象,然后把它和別的參數(shù)一起發(fā)送到 ?requests.*
? 或者 ?Session.*
?。
然而,上述代碼會失去 Requests ?Session
? 對象的一些優(yōu)勢, 尤其 ?Session
? 級別的狀態(tài),例如 cookie 就不會被應用到你的請求上去。要獲取一個帶有狀態(tài)的 ?PreparedRequest
?, 請用 ?Session.prepare_request()
? 取代 ?Request.prepare()
? 的調用,如下所示:
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)
更多建議: