当你有意选择 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 并不能证明另一处也可用。

相关文章