Guzzle Pool: posreduj proxy vsake naloge v requestAsync
Pripnite možnosti proxy k vsaki asinhroni operaciji namesto k sporočilu zahteve PSR-7 ali blokirajoči tovarni.
Postavite proxy vsake naloge Guzzle na asinhrono operacijo, ki jo zažene pool. Znotraj obstoječe nastavitve odjemalca uporabite tovarne obljub:
$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();
Vsaka preverjena naloga zagotovi cilj in proxy. Za dovoljeno javno zahtevo lahko kandidat HTTP s seznama proxyjev HTTP zagotovi URL proxyja te naloge brez poverilnic; izbira se zgodi pred zagonom njene tovarne. Zahteva PSR-7 opisuje sporočilo HTTP, medtem ko te možnosti pošiljanja nadzorujejo prenos. Izpisovanje ali shranjevanje vrednosti proxyja ob sporočilu ne more konfigurirati operacije, ki ga pošilja drugače.
Vrnite requestAsync() iz tovarne. Klic sinhronega request() tam lahko blokira, medtem ko pool poskuša začeti sočasno delo.
Dodajte povratne klice za izpolnjene in zavrnjene izide z obstoječim ravnanjem aplikacije. Ohranite ključ naloge, identifikator izbranega proxyja in številko poskusa v obeh izidih; vrstni red dokončanja se razlikuje od vrstnega reda vnosa. Potem ko je eden zabeležen za nalogo, v tovarni na skrivaj ne izberite druge končne točke.
Vrednost sočasnosti omejuje delo tega poola. Več nalog, ki izberejo en omejen proxy ali račun, lahko še vedno potrebuje ločen proračun za to končno točko.
Razlagajte rezultate po stopnjah: zavrnitev cilja, preverjanje proxyja in potek povezave so različni izidi. Možnosti pošiljanja, shranjene z nalogo, kažejo, katera pot je dala vsak rezultat.