目录:导读
前言
会话对象
①会话对象让你能够跨请求保持某些参数。它也会在同一个 Session 实例发出的所有请求之间保持 cookie, 期间使用 urllib3库 的 connection pooling 【连接池】功能。
所以如果向同一主机发送多个请求,底层的 TCP 连接将会被重用【同一服务器地址发起的多个请求不需要重新token身份认证,比如对同一服务器不同资源发起的请求】,从而带来显著的性能提升。
会话对象具有主要的 Requests API 的所有方法。
实例:跨请求【注意这里是跨请求而不是跨域】保持一些 cookie:
import requests
session = requests.Session()
session.get('http://httpbin.org/cookies/set/sessioncookie/123456789')
r = session.get("http://httpbin.org/cookies")
print(r.text)
②会话对象也可用来为请求时提供缺省数据。这是通过 为会话对象的属性提供数据 来实现的:
import requests
session = requests.Session()
session.auth = ('user', 'pass')
session.headers.update({
'x-test': 'true'})
# both 'x-test' and 'x-test2' are sent
response = session.get('http://httpbin.org/headers', headers={
'x-test2': 'true'})
print(response.request.headers)
运行结果:【任何传递给请求方法的字典都会与已设置会话层数据合并【requests headers】。方法层的参数覆盖会话的参数。】
③【注意】即使使用会话对象,方法级别的参数不会被跨请求保持。
例如:第一个请求发送 cookie,第二个请求无法获取cookie:
import requests
session = requests.Session()
r = session.get('http://httpbin.org/cookies', cookies={
'from-my': 'browser'}) # 这里的cookie是通过参数的方式发送至服务器,而不是通过请求头的方式
print(r.json())
# '{"cookies": {"from-my": "browser"}}'
r = session.get('http://httpbin.org/cookies')