Help to test if a proxy works using php

2019-04-16 07:29发布

I have a list of proxies, need to use them in a php script I am writing.

How can I test that the proxy will work before I use it? is that possible? at the moment if the proxy doesn't work the script just dies after 30 seconds. Is there a quicker way to identify whether it will work or not?

perhaps create a socket connection? send something to it that will reveal whether the proxy is open?

thanks

2条回答
老娘就宠你
2楼-- · 2019-04-16 07:38

You can use this function

 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);
    }
查看更多
我欲成王,谁敢阻挡
3楼-- · 2019-04-16 07:46

you can use fsockopen for this, where you can specify a timeout.

A simple proxy list checker. You can check a list ip:port if that port is opened on that 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

?>

you may also want to use set_time_limit so that you can run your script for longer.

Code taken from: http://www.php.net/manual/en/function.fsockopen.php#95605

查看更多
登录 后发表回答