【问题标题】:Guzzle: Changing request options in a pool generatorGuzzle:更改池生成器中的请求选项
【发布时间】:2017-09-14 20:44:54
【问题描述】:

我有以下代码:

$generator = function() use ($headers) {
   while ($request = array_shift($this->requests)) {
      yield 'id_' . $request['id'] => new Request('GET', $request['url'], $headers);
   }
}

但是,我想添加一些自定义请求选项,例如代理和自定义超时。据我所知,这些只能在客户端实际发送时设置;

   $this->client->send($r, ['proxy' => $proxy, 'connect_timeout' => 10]);

当我如下调整生成器时:

   $r = new Request('GET', $request['url'], $headers);

   yield 'id_' . $request['id'] => $this->client->send($r, ['proxy' => $proxy, 'connect_timeout' => 10]);

代码不再工作,因为它需要一个 RequestInterface。

那么如何在池生成器中设置代理呢?不可能吗?

【问题讨论】:

    标签: php curl guzzle6 guzzle


    【解决方案1】:

    生成器可以返回 RequestInterface 或 PromiseInterface。

    因此您可以执行“完整”请求,只需异步执行即可立即获得承诺并将其交给池。

    $generator = function () use ($hreaders) {
        while ($request = array_shift($this->requests)) {
            yield 'id_' . $request['id'] => $this->client->sendAsync('GET', $request['url'], [
                // Your options here.
            ]);
        }
    };
    

    【讨论】:

      猜你喜欢
      • 2017-07-09
      • 2018-09-03
      • 1970-01-01
      • 1970-01-01
      • 2017-09-17
      • 1970-01-01
      • 1970-01-01
      • 2015-03-22
      • 2019-09-23
      相关资源
      最近更新 更多