Guzzle Pool: passe o proxy de cada tarefa para requestAsync
Anexe as opções de proxy a cada operação assíncrona em vez da mensagem de solicitação PSR-7 ou de uma fábrica bloqueante.
Coloque o proxy de cada tarefa do Guzzle na operação assíncrona iniciada pelo pool. Dentro de uma configuração de cliente existente, use fábricas de promessas:
$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 tarefa validada fornece um destino e um proxy. Para uma solicitação pública permitida, um candidato HTTP da lista de proxies HTTP pode fornecer a URL de proxy sem credenciais dessa tarefa; a seleção acontece antes de sua fábrica ser executada. Uma solicitação PSR-7 descreve a mensagem HTTP, enquanto estas opções de envio controlam o transporte. Imprimir ou armazenar um valor de proxy ao lado da mensagem não consegue configurar uma operação que o envie de outra forma.
Retorne requestAsync() da fábrica. Chamar request() síncrono ali pode bloquear enquanto o pool tenta iniciar trabalho concorrente.
Adicione callbacks de cumprimento e rejeição usando o tratamento existente da aplicação. Mantenha a chave da tarefa, o identificador do proxy escolhido e o número da tentativa nos dois resultados; a ordem de conclusão difere da ordem de entrada. Não escolha em segredo outro endpoint na fábrica depois de registrar um para a tarefa.
O valor de concorrência limita o trabalho deste pool. Várias tarefas que escolhem um único proxy ou conta restrita ainda podem exigir um orçamento separado para esse endpoint.
Interprete os resultados por estágio: rejeição do destino, autenticação do proxy e tempo esgotado de conexão são desfechos diferentes. As opções de envio mantidas com a tarefa mostram qual rota produziu cada resultado.