Guzzle Pool: pasa o proxy de cada traballo a requestAsync
Engade as opcións de proxy a cada operación asíncrona en lugar da mensaxe de petición PSR-7 ou dunha fábrica bloqueante.
Coloca o proxy de cada traballo de Guzzle na operación asíncrona que inicia o pool. Dentro dunha configuración de cliente existente, usa fábricas de promesas:
$operations = function () use ($client, $jobs) {
foreach ($jobs as $id => $job) {
yield $id => function () use ($client, $job) {
return $client->requestAsync('GET', $job['url'], [
'proxy' => $job['proxy'],
'timeout' => 20,
]);
};
}
};
$pool = new GuzzleHttp\Pool($client, $operations(), [
'concurrency' => 4,
]);
$pool->promise()->wait();
Cada traballo validado fornece un destino e un proxy. Para unha petición pública permitida, un candidato HTTP da lista de proxies HTTP pode fornecer o URL de proxy sen credenciais dese traballo; a selección ocorre antes de que se execute a súa fábrica. Unha petición PSR-7 describe a mensaxe HTTP, mentres que estas opcións de envío controlan o transporte. Imprimir ou gardar un valor de proxy xunto á mensaxe non pode configurar unha operación que o envía doutro xeito.
Devolve requestAsync() desde a fábrica. Chamar a request() síncrono alí pode bloquear mentres o pool tenta iniciar traballo concorrente.
Engade callbacks de cumprido e de rexeitado usando o manexo existente da aplicación. Conserva a clave do traballo, o identificador do proxy escollido e o número de intento en ambos os resultados; a orde de finalización difire da orde de entrada. Non escollas en segredo outro extremo na fábrica despois de rexistrar un para o traballo.
O valor de concorrencia limita o traballo deste pool. Varios traballos que escollen un mesmo proxy ou conta restrinxida poden seguir necesitando un orzamento aparte para ese extremo.
Interpreta os resultados por etapa: o rexeitamento do destino, a autenticación do proxy e o tempo de espera de conexión son resultados distintos. As opcións de envío conservadas co traballo mostran que ruta produciu cada resultado.