@burov0798
Пытаюсь изучать php\js

Как в Guzzle при асинхронной работе для каждого запроса использовать рандомный proxy?

Добрый день. Обрабатываю через Guzzle асинхронно список сайтов, для каждого сайта нужно использовать рандомный прокси из списка, в документации есть пример, где указывается один прокси для клиента и далее используется для всех запросов, можно ли сделать так, чтобы для каждый запрос выполнялся с рандомным прокси из списка?
$client = new Client([
    'timeout'  => 10.0,
    'proxy'  =>  '51.77.66.35:10563'
]);
 
$requests = function () {
    $handle = fopen("site.txt", "r");
		if ($handle) {
		    while (($s = fgets($handle)) !== false) {
		    	yield new Request('GET', trim($s)); 
			}
			fclose($handle);	
		}
};
 
$pool = new Pool($client, $requests(), [
    'concurrency' => 25,
    'fulfilled' => function ($response, $index) {
        $body = $response->getBody();
        // Обрабатываю $body
        
    },
    'rejected' => function ($reason, $index) {
	    	// Обрабатываю ошибки
    },
]);
 
// Инициализируем трансферы и создаём promise
$promise = $pool->promise();
 
// Ожидаем ответ promise // Принудительно завершаем пул запросов
$promise->wait();
  • Вопрос задан
  • 185 просмотров
Решения вопроса 1
@burov0798 Автор вопроса
Пытаюсь изучать php\js
$proxy = open("./proxy..txt");

$requests = function ($data) use ($client, $proxy) { 
    foreach ($data as $u) {
        $p = trim($proxy[array_rand($proxy)]); 
        yield function() use ($client, $u, $p) {
            return $client->request(
                'GET',
                trim($u),
                [
                    'proxy' => $p
                ]
            );
        };
    }
};
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы