在传递数值型 CURLOPT 选项之前,先选用 CurlTransport。Yii2 的 HTTP 客户端默认使用 StreamTransport,并不会因为存在这些常量就变成 cURL:

$client = new \yii\httpclient\Client([
    'transport' => \yii\httpclient\CurlTransport::class,
]);

$response = $client->createRequest()
    ->setMethod('GET')
    ->setUrl('https://api.example/items')
    ->setOptions([
        CURLOPT_PROXY => 'http://proxy.example:8080',
        CURLOPT_PROXYAUTH => CURLAUTH_BASIC,
        CURLOPT_PROXYUSERNAME => $proxyUser,
        CURLOPT_PROXYPASSWORD => $proxyPassword,
        CURLOPT_CONNECTTIMEOUT => 5,
        CURLOPT_TIMEOUT => 15,
    ])
    ->send();

请使用带 cURL 扩展的 PHP 运行环境。本示例假定 HTTP 代理接受 Basic;请让代理与 transport 支持的方式相匹配。

CURLOPT_PROXYAUTH 选择的是对中间代理的认证;CURLOPT_HTTPAUTH 和 API 授权则用于目标服务端。

Yii2 的共享请求选项(包括区分大小写的代理设置和超时)属于另一套接口。它们不会让任意 cURL 常量在各后端之间通用。

如果 Client.requestConfig 提供了必须保留的默认值,请用 addOptions 做按请求的追加。示例中的 setOptions 会替换该集合,可能移除继承来的选择。

相关文章