Python 3.9中使用Requests请求文档页面会发起多少次HTTP请求?
核心结论
默认配置下单独调用一次requests.get()本身不会主动请求页面内的其他静态资源(比如CSS、JS、图片等),但存在几种特殊场景会触发多次HTTP请求:
- 自动跟随重定向:requests默认开启了3XX重定向自动跟随逻辑,每跳转一次就会发起一次新的请求。你可以通过
response.history属性查看所有跳转的历史响应,总请求数为len(response.history) + 1(最后一次是最终页面的请求)。如果要关闭该逻辑,可以在调用时加上allow_redirects=False参数验证。 - 自动重试逻辑:如果你给requests Session配置了带重试规则的
HTTPAdapter、或者自己在代码中封装了失败重试的逻辑,请求超时/报错时会自动重发请求,也会被代理统计为多次请求。 - 特殊HTTP协商机制:极少场景下如果请求头携带
Expect: 100-continue,客户端会先发送请求头等待服务端返回100状态码后再发送请求体,不过GET请求通常没有请求体,该场景出现概率极低。
另外注意:代理服务商的速率限制不一定只有并发数限制,很多服务商还会限制单位时间内的总请求数(QPS),就算是单线程串行发请求,只要频率超过阈值也会触发限制。
验证方法
你可以通过以下方式确认实际发起的请求数:
- 开启requests的debug日志,直接输出所有HTTP请求日志
- 抓包查看代理通道的实际流量,统计请求次数
- 临时关闭自动重定向、重试逻辑后再测试是否还会触发速率限制
内容的提问来源于stack exchange,提问作者miran80
相关产品推荐
相关产品推荐

