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。
|
|