2017-04-18 1 views
0

Ich habe den folgenden Code bekam:Guzzle: Ändern Anfrage Optionen in einem Pool Generator

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

Allerdings würde Ich mag einige benutzerdefinierte Anfrage Optionen hinzufügen, wie ein Proxy und benutzerdefinierte Timeout. Soweit ich weiß, können diese nur eingestellt werden, wenn der Client tatsächlich sendet;

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

Wenn ich den Generator wie folgt anpassen:

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

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

Der Code nicht mehr funktioniert, weil es eine RequestInterface erwartet.

Also, wie kann ich den Proxy stattdessen in einem Pool-Generator festlegen? Ist das nicht möglich?

Antwort

0

Ein Generator kann entweder ein RequestInterface oder ein PromiseInterface zurückgeben.

So können Sie eine "vollständige" Anfrage machen, tun Sie es einfach asynchron, um sofort ein Versprechen zu erhalten und es dem Pool zu übergeben.

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