Umieść proxy każdego zadania Guzzle na operacji asynchronicznej uruchamianej przez pulę. W istniejącej konfiguracji klienta używaj fabryk obietnic:

$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();

Każde zweryfikowane zadanie dostarcza cel i proxy. Dla dozwolonego żądania publicznego kandydat HTTP z listy proxy HTTP może dostarczyć adres URL proxy tego zadania bez danych uwierzytelniających; wybór następuje przed uruchomieniem jego fabryki. Żądanie PSR-7 opisuje komunikat HTTP, natomiast te opcje wysyłania sterują transportem. Wypisanie lub zapisanie wartości proxy obok komunikatu nie może skonfigurować operacji, która wysyła go inaczej.

Zwróć requestAsync() z fabryki. Wywołanie tam synchronicznego request() może zablokować, gdy pula próbuje rozpocząć równoległą pracę.

Dodaj wywołania zwrotne dla wyników spełnionych i odrzuconych, korzystając z istniejącej obsługi aplikacji. Zachowaj klucz zadania, identyfikator wybranego proxy i numer próby w obu wynikach; kolejność ukończenia różni się od kolejności wejściowej. Nie wybieraj po cichu innego punktu końcowego w fabryce po zapisaniu jednego dla zadania.

Wartość współbieżności ogranicza pracę tej puli. Kilka zadań wybierających jedno ograniczone proxy lub konto może nadal wymagać osobnego budżetu dla tego punktu końcowego.

Interpretuj wyniki według etapów: odrzucenie celu, uwierzytelnianie proxy i przekroczenie limitu czasu połączenia to różne wyniki. Opcje wysyłania zachowane przy zadaniu pokazują, która trasa dała każdy wynik.

Powiązane artykuły