Pune proxy-ul fiecărei sarcini Guzzle pe operațiunea asincronă pornită de pool. Într-o configurație de client existentă, folosește fabrici de promisiuni:

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

Fiecare sarcină validată oferă o destinație și un proxy. Pentru o cerere publică permisă, un candidat HTTP din lista de proxy HTTP poate furniza URL-ul de proxy fără acreditări al acelei sarcini; selecția are loc înainte ca fabrica sa să ruleze. O cerere PSR-7 descrie mesajul HTTP, în timp ce aceste opțiuni de trimitere controlează transportul. Tipărirea sau stocarea unei valori de proxy lângă mesaj nu poate configura o operațiune care îl trimite altfel.

Returnează requestAsync() din fabrică. Apelarea request() sincron acolo poate bloca în timp ce pool-ul încearcă să pornească lucru concurent.

Adaugă callback-uri pentru rezultatele împlinite și respinse folosind gestionarea existentă a aplicației. Păstrează cheia sarcinii, identificatorul proxy-ului ales și numărul încercării în ambele rezultate; ordinea finalizării diferă de ordinea intrării. Nu alege în secret alt endpoint în fabrică după ce unul a fost înregistrat pentru sarcină.

Valoarea concurenței limitează munca acestui pool. Mai multe sarcini care aleg un singur proxy sau cont restricționat pot avea în continuare nevoie de un buget separat pentru acel endpoint.

Interpretează rezultatele pe etape: respingerea destinației, autentificarea proxy-ului și expirarea conexiunii sunt rezultate diferite. Opțiunile de trimitere păstrate cu sarcina arată ce rută a produs fiecare rezultat.

Articole similare