$proxy = 'http://'
    . rawurlencode($proxyUser) . ':'
    . rawurlencode($proxyPassword)
    . '@proxy.example:8080';

$client = new \Symfony\Component\HttpClient\CurlHttpClient([
    'proxy' => $proxy,
    'no_proxy' => 'localhost,internal.example',
]);
$response = $client->request('GET', 'https://api.example/items');
$status = $response->getStatusCode();

rawurlencode 适用于 用户名和密码分别。编码整个 URL 还会把定位监听器所需的 scheme 与 authority 分隔符一并编码。

HTTP 代理通过 CONNECT 承载 HTTPS API 连接。代理账号并不替代 API 认证,代理登录也不需要把 http_version 强制设为 2.0。

以逗号分隔的 no_proxy 列表用于选择预期的直连主机。若没有显式选项,组件也可以改用其支持的环境设置。

这会直接构造 CurlHttpClient,因此需要 PHP 的 cURL 传输。Symfony 的通用工厂可以选择其他后端。若仍被拒绝,应确认所选的传输方式并保留代理阶段的错误,而不是把账号移入目标的 Authorization 头。

相关文章