在 Yii2 的 CurlTransport 中配置代理
在把 CURLOPT_PROXY 和代理认证选项传给 Yii2 HTTP 客户端请求之前,先选用 CurlTransport。
在传递数值型 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 会替换该集合,可能移除继承来的选择。