Guzzle 使用代理

Guzzle Using Proxy

参考文献:

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

Set proxy in Guzzle

环境:

GuzzleHttp/6.2.1 
curl/7.47.0 
PHP/7.1.3-3+deb.sury.org~xenial+1

我正在尝试通过异步 Guzzle 调用使用代理服务器。

我发现当我在创建客户端时设置代理时,它起作用了。

例如

new Client(['proxy' => 'tcp://64.140.159.209:80'])

然而,当创建一个没有选项的客户端时......然后在请求上设置代理,根本不使用代理,并且 guzzle 直接从客户端机器连接到服务器机器。这可以通过点击 http://httpbin.org/ip 并检查 httpbin 返回的 Origin 来确认。

我需要能够为每个请求设置代理。

相关代码如下:

$client = new Client();

$request = new Request(
                       'GET', 
                       'http://httpbin.org/ip',
                       ['proxy' => 'tcp://64.140.159.209:80']
                      );

$client->sendAsync($request)
                ->then( 
                        ...closure here 
                        // process here 
);

希望这对某人有所帮助。

文档http://docs.guzzlephp.org/en/stable/request-options.html#proxy 仅列出了从客户端创建新请求。

也就是说我理解错了。我直接创建新请求并传递带有代理信息的第三个参数,期望在单个客户端中根据请求更改该信息。看起来代理是基于每个客户端设置的,即使您正在进行异步调用也是如此。

所以我不得不修改我的应用程序以针对每个异步请求使用一个新的客户端。