You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让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}")

关键说明

  1. 指定CONNECT方法:通过self.client.request()方法,直接将method参数设为"CONNECT",就能替代默认的GET请求。
  2. 请求头合规性:严格按照RFC 7231要求设置Host头(与目标服务器地址一致)和Proxy-Authorization头(确保Basic认证的base64字符串正确)。
  3. 代理配置:如果你的Locust实例已经通过命令行或配置文件设置了代理,on_start里的proxies配置可以省略;否则需要在这里明确指定代理地址。

这个方案会生成你需要的标准CONNECT请求,与你期望的格式完全一致,应该能解决代理服务器不兼容GET请求的问题。

内容的提问来源于stack exchange,提问作者Katve

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 16:42:51