为 SOCKS 代理选择 Guzzle 的 cURL 处理器
仅支持 HTTP 流的处理器无法从代理 URL 获得 SOCKS 协商;应选择在实际 PHP 运行时中受支持的传输方式。
当你有意选择 Guzzle 客户端的处理器时,基于 cURL 的调用栈可以使用 SOCKS:
$stack = \GuzzleHttp\HandlerStack::create(
new \GuzzleHttp\Handler\CurlHandler()
);
$client = new \GuzzleHttp\Client([
'handler' => $stack,
'proxy' => 'socks5h://proxy.example.net:1080',
]);socks5h 会让代理解析目标域名。Guzzle 把端点交给 libcurl,因此所加载的 libcurl 构建必须支持该协议。SOCKS5 代理列表为客户端代理 URL 提供公开的端点候选项。
如果应用已经拥有自己的处理器调用栈,在替换它并因此丢失中间件之前,应先检查其底层传输。仅限于 PHP HTTP 流的处理器不会因为客户端收到这个选项就能实现 SOCKS。
检查实际发出请求的进程。CLI PHP 与 PHP-FPM 可能加载不同的配置文件和扩展;在一处出现 cURL 并不能证明另一处也可用。