如何在Guzzle中正确设置CURLOPT_PROXY?

时间:2015-01-28 06:26:01

标签: php curl guzzle

我正在尝试设置CURLOPT_PROXY,但它不起作用。卷曲已启用。如果我用" raw"卷曲请求 - 一切正常..那么?可能是什么解决方案?

$client = new GuzzleHttp\Client();

$res = $client->get('http://www.ipmango.com/api/myip', [
    'config' => [
        'curl' => [
            'CURLOPT_PROXY' => '194.135.220.18:8081',
        ],
    ]
]);

echo $res->getBody(); // displays my ip addess, not that what I set.

3 个答案:

答案 0 :(得分:9)

我花了很多时间发现自己,您还需要将选项CURLOPT_HTTPPROXYTUNNEL设置为1。如下所示:

<?php
$res = $client->get('http://www.ipmango.com/api/myip', [
'config' => [
    'curl' => [
        'CURLOPT_PROXY' => '194.135.220.18:8081',
        'CURLOPT_HTTPPROXYTUNNEL' => 1,
    ]
   ]
]);

答案 1 :(得分:3)

GuzzleHttp客户端会自动检测是否设置了环境变量HTTP_PROXYHTTPS_PROXY

(参见\ path \ to \ project \ vendor \ guzzlehttp \ guzzle \ src \ Client.php的第165-175行)

因此将HTTP_PROXY=http://ip:portHTTPS_PROXY=https://ip:port都设置为系统环境变量。现在重新启动命令行,然后重新运行php artisan serve

如果需要,您也可以在环境变量中为代理配置身份验证

答案 2 :(得分:1)

Guzzle文档提供有关为单个请求设置代理的信息

    $client = new Client([
        'base_uri' => 'http://doma.in/',
        'timeout' => 10.0,
        'cookie' => true,
        'proxy' => 'tcp://12.34.56.78:3128',
    ]);

http://docs.guzzlephp.org/en/latest/request-options.html#proxy

但是,您可以在初始化客户端时将其设置为所有请求

{{1}}