Posa el proxy de cada tasca de Guzzle a l'operació asíncrona que inicia el pool. Dins d'una configuració de client existent, fes servir fàbriques de promeses:

$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 tasca validada proporciona una destinació i un proxy. Per a una petició pública permesa, un candidat HTTP de la llista de proxys HTTP pot proporcionar l'URL de proxy sense credencials d'aquesta tasca; la selecció passa abans que s'executi la seva fàbrica. Una petició PSR-7 descriu el missatge HTTP, mentre que aquestes opcions d'enviament controlen el transport. Imprimir o desar un valor de proxy al costat del missatge no pot configurar una operació que l'enviï d'una altra manera.

Retorna requestAsync() des de la fàbrica. Cridar-hi request() de forma síncrona pot bloquejar mentre el pool intenta iniciar feina concurrent.

Afegeix callbacks de complert i de rebutjat amb la gestió existent de l'aplicació. Conserva la clau de la tasca, l'identificador del proxy triat i el número d'intent en tots dos resultats; l'ordre de compleció difereix de l'ordre d'entrada. No triïs en secret un altre extrem a la fàbrica després d'haver-ne registrat un per a la tasca.

El valor de concurrència limita la feina d'aquest pool. Diverses tasques que trien un sol proxy o compte limitat poden necessitar igualment un pressupost separat per a aquest extrem.

Interpreta els resultats per etapa: el rebuig de la destinació, l'autenticació del proxy i el temps d'espera de connexió són resultats diferents. Les opcions d'enviament conservades amb la tasca mostren quina ruta va produir cada resultat.

Articles relacionats