У меня есть список прокси, нужно использовать их в скрипте php, который я пишу.
Как проверить, работает ли прокси-сервер, прежде чем использовать его? это возможно? на данный момент, если прокси не работает, скрипт просто умирает через 30 секунд. Есть ли более быстрый способ определить, будет ли это работать или нет?
возможно, создать соединение сокета? отправить ему что-нибудь, что покажет, открыт ли прокси-сервер?
благодаря
вы можете использовать fsockopen
для этого, где вы можете указать тайм-аут.
Простая проверка списка прокси. Вы можете проверить список ip: port, если этот порт открыт на этом IP-адресе.
<?php $fisier = file_get_contents('proxy_list.txt'); // Read the file with the proxy list $linii = explode("\n", $fisier); // Get each proxy $fisier = fopen("bune.txt", "a"); // Here we will write the good ones for($i = 0; $i < count($linii) - 1; $i++) test($linii[$i]); // Test each proxy function test($proxy) { global $fisier; $splited = explode(':',$proxy); // Separate IP and port if($con = @fsockopen($splited[0], $splited[1], $eroare, $eroare_str, 3)) { fwrite($fisier, $proxy . "\n"); // Check if we can connect to that IP and port print $proxy . '<br>'; // Show the proxy fclose($con); // Close the socket handle } } fclose($fisier); // Close the file ?>
вы также можете использовать set_time_limit, чтобы вы могли запускать скрипт дольше.
Код, взятый из: http://www.php.net/manual/en/function.fsockopen.php#95605
Вы можете использовать эту функцию
function check($proxy=null) { $proxy= explode(':', $proxy); $host = $proxy[0]; $port = $proxy[1]; $waitTimeoutInSeconds = 10; if($fp = @fsockopen($host,$port,$errCode,$errStr,$waitTimeoutInSeconds)){ return 'yes'; } else { return 'false'; } fclose($fp); }