Zet de proxy van elke Guzzle-job op de asynchrone bewerking die de pool start. Binnen een bestaande clientopstelling gebruik je promise-fabrieken:

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

Elke gevalideerde job levert een bestemming en een proxy. Voor een toegestaan openbaar verzoek kan een HTTP-kandidaat uit de HTTP-proxylijst de proxy-URL zonder inloggegevens van die job leveren; de selectie gebeurt voordat de fabriek ervan draait. Een PSR-7-verzoek beschrijft het HTTP-bericht, terwijl deze verzendopties het transport besturen. Een proxywaarde naast het bericht afdrukken of opslaan kan geen bewerking configureren die hem op een andere manier verstuurt.

Geef requestAsync() terug vanuit de fabriek. Een synchrone request() daar aanroepen kan blokkeren terwijl de pool probeert gelijktijdig werk te starten.

Voeg callbacks toe voor vervulde en afgewezen resultaten met de bestaande afhandeling van de applicatie. Bewaar de jobsleutel, de identificatie van de gekozen proxy en het pogingsnummer in beide uitkomsten; de voltooiingsvolgorde verschilt van de invoervolgorde. Kies niet stiekem een ander eindpunt in de fabriek nadat er één voor de job is vastgelegd.

De gelijktijdigheidswaarde begrenst het werk van deze pool. Meerdere jobs die één beperkte proxy of account kiezen, kunnen nog steeds een apart budget voor dat eindpunt nodig hebben.

Interpreteer resultaten per fase: afwijzing van de bestemming, proxy-authenticatie en verbindingstime-out zijn verschillende uitkomsten. De verzendopties die bij de job worden bewaard, tonen welke route elk resultaat opleverde.

Gerelateerde artikelen