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.

Artigos relacionados