如何使用requests通过代理连接网站并保持连接10秒?
嘿,我来帮你搞定这个问题!你的思路是对的,用requests.Session来复用连接,但默认情况下,get()请求完成后连接很快就会被释放,所以没法保持10秒。咱们可以通过几个小调整来实现需求:
修改思路及完整脚本
要让连接保持10秒,核心是让TCP连接处于活跃状态,不要在请求完成后立刻关闭。具体要做这几件事:
- 启用流式响应(
stream=True):阻止requests一次性下载完所有响应内容,这样连接会维持打开状态 - 加入延迟等待:用
time.sleep(10)来让连接保持活跃10秒 - 确保长连接生效:requests的Session默认会发送
Connection: keep-alive请求头,不过要确保你的代理服务器也支持长连接
下面是修改后的完整代码:
import requests import time url = 'http://WEBSITE.com/' proxies = {'http': 'http://IP:PORT'} # 创建会话并配置代理 s = requests.Session() s.proxies.update(proxies) try: # 发送流式请求,保持连接打开 response = s.get(url, stream=True) # 维持连接10秒 time.sleep(10) finally: # 确保资源被正确释放 response.close() s.close()
额外说明
- 如果目标网站是HTTPS协议,记得把代理配置里的
http改成https,或者同时配置两种协议的代理:proxies = {'http': 'http://IP:PORT', 'https': 'http://IP:PORT'} - 有些代理服务器可能会强制关闭长时间闲置的连接,如果遇到这种情况,可以在等待期间偶尔读取一小段响应内容(比如
response.raw.read(1))来保持连接活跃
内容的提问来源于stack exchange,提问作者Little Anchovy
相关产品推荐
相关产品推荐

