如何让Locust生成HTTP CONNECT请求替代GET请求适配代理?
如何用Locust生成符合RFC 7231标准的CONNECT请求
当然可以实现!Locust底层基于requests库,它的HttpUser客户端支持发送任意HTTP方法的请求,包括代理所需的CONNECT方法——只是默认没有封装成快捷方法而已,我们只需要手动指定请求方法即可。
具体实现代码
下面是一个完整的示例,会生成你需要的符合标准的CONNECT请求:
from locust import HttpUser, task, between class ProxyTunnelUser(HttpUser): wait_time = between(1, 3) # 模拟用户请求间隔 def on_start(self): # 配置你的代理地址(如果之前已经在Locust配置里设置过,这步可以省略) self.client.proxies = { "http": "http://your-proxy-server:proxy-port", "https": "http://your-proxy-server:proxy-port" } @task def establish_proxy_tunnel(self): target_server = "server.example.com:80" # 构造符合RFC 7231要求的请求头 request_headers = { "Host": target_server, "Proxy-Authorization": "basic aGVsbG86d29ybGQ=" } # 手动指定CONNECT方法发送请求 response = self.client.request( method="CONNECT", url=target_server, headers=request_headers ) # 可选:验证请求结果 if response.status_code in (200, 204): print(f"成功与{target_server}建立代理隧道") else: print(f"隧道建立失败,状态码: {response.status_code}")
关键说明
- 指定CONNECT方法:通过
self.client.request()方法,直接将method参数设为"CONNECT",就能替代默认的GET请求。 - 请求头合规性:严格按照RFC 7231要求设置
Host头(与目标服务器地址一致)和Proxy-Authorization头(确保Basic认证的base64字符串正确)。 - 代理配置:如果你的Locust实例已经通过命令行或配置文件设置了代理,
on_start里的proxies配置可以省略;否则需要在这里明确指定代理地址。
这个方案会生成你需要的标准CONNECT请求,与你期望的格式完全一致,应该能解决代理服务器不兼容GET请求的问题。
内容的提问来源于stack exchange,提问作者Katve
相关产品推荐
相关产品推荐

