requests的高级功能
如果简单的使用requests,会发现(requesets.get..)使用了默认参数的HTTPAdapter
,因此所有由HTTPAdapter
初始化参数指定的功能都没有办法使用,例如:重试、缓存池大小、缓存连接池大小、缓存池是否堵塞等。当然,因为requests.get
方式只会发起一次HTTP请求,所以缓存相关的都没有设置的必要。
|
|
设置超时时间
超时时间可以通过timeout参数指定,可以详细为(connect_timeout, read_timeout)。
|
|
通过流程图可以看到,传递的timeout参数一直进入到HTTPAdapter.send
内。
|
|
然后实例化后的timeout
传递给HTTPConnectionPool
,其中的connect_timeout
设置为conn.timeout
然后一直传递到socket
中,通过socket.settimeout
设置起效。需要注意socket
是在设置参数之后再执行的bind
->connect
操作。
|
|
其中的read_timeout
在HTTPConnectionPool
中设置。通过代码可以看到socket.settimeout
设置的是socket
所有操作的超时时间,在不同的阶段调用该函数就设置了接下来操作的超时时间,settimeout
-> bind
-> connect
-> settimeout
-> read
。
|
|