使用PHP检查代理

使用PHP检查代理,php,proxy,Php,Proxy,我正在编写一个需要大量代理才能工作的web应用程序。 我也有一个代理列表,但我不知道它们中的哪一个有效,它们是什么类型(socks、http、https) 假设我有5000个ip:port格式的代理。 最快的检查方法是什么 我试过打开fsockopen,但速度很慢。 也许先ping它们可以节省时间?您可以使用cURL检查代理。给出了一些好文章 希望对您有所帮助端口通常会为您提供有关代理类型的良好线索。 80128通常是HTTP 1080是典型的袜子 但现实一点,你似乎有一个公共代理列表。不太可能

我正在编写一个需要大量代理才能工作的web应用程序。 我也有一个代理列表,但我不知道它们中的哪一个有效,它们是什么类型(socks、http、https)

假设我有5000个ip:port格式的代理。 最快的检查方法是什么

我试过打开fsockopen,但速度很慢。
也许先ping它们可以节省时间?

您可以使用cURL检查代理。给出了一些好文章
希望对您有所帮助

端口通常会为您提供有关代理类型的良好线索。
80128通常是HTTP
1080是典型的袜子

但现实一点,你似乎有一个公共代理列表。不太可能每个人都不再工作了。
您可以在脚本或类似脚本中使用curl、wget或lynx来测试代理

您还可以尝试将列表按SOCKS和HTTP进行尽可能好的排序,然后将其输入。 这是一个免费的项目,但你需要一个邀请码或99美分的门票才能成为会员。 一旦你成为会员,你就可以上传你的代理列表,并对它们进行测试。所有的工作文件将按排序返回给您。
所以,如果你不想自己编程,这可能是你最好的选择,邀请代码有时可以在各种论坛中找到

但请记住我说过的,如果你有一个5000个随机代理的列表,我打赌你再也找不到超过10个工作代理了。公共代理的寿命很短。

这可能正是您想要的。您可以很容易地用它检查代理列表


如果您想自己开发它,那么使用一个小脚本来实现与API相同的功能并不困难。

以下是我使用的代码。您可以修改它以满足您的要求:

    function _check($url,$usecookie = false,$sock="",$ref) {
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL, $url);  
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, False);  
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 1);  
    curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);  
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION,1);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT,$_POST['timeoutpp']);
    curl_setopt($ch, CURLOPT_HEADER, 0);   
    curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/6.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.7) Gecko/20050414 Firefox/1.0.3");  
    if($sock){
        curl_setopt($ch, CURLOPT_PROXY, $sock);
        curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);
    }
    if ($usecookie){  
        curl_setopt($ch, CURLOPT_COOKIEJAR, $usecookie);  
        curl_setopt($ch, CURLOPT_COOKIEFILE, $usecookie);     
    } 
    if ($ref){  
        curl_setopt($ch, CURLOPT_REFERER,$ref); 
    }
    curl_setopt($ch, CURLOPT_MAXREDIRS, 10); 
    $result=curl_exec ($ch);  
    curl_close($ch);  
    return $result;  
}


你应该发布你的代码,可能是数量太多,也可能是检查方法有问题。请根据你所做的更改编辑答案。
<?php
$proxies = file ("proxies.txt");
$mc = curl_multi_init ();
for ($thread_no = 0; $thread_no<count ($proxies); $thread_no++)
{
$c [$thread_no] = curl_init ();
curl_setopt ($c [$thread_no], CURLOPT_URL, "http://google.com");
curl_setopt ($c [$thread_no], CURLOPT_HEADER, 0);
curl_setopt ($c [$thread_no], CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($c [$thread_no], CURLOPT_CONNECTTIMEOUT, 5);
curl_setopt ($c [$thread_no], CURLOPT_TIMEOUT, 10);
curl_setopt ($c [$thread_no], CURLOPT_PROXY, trim ($proxies [$thread_no]));
curl_setopt ($c [$thread_no], CURLOPT_PROXYTYPE, 0);
curl_multi_add_handle ($mc, $c [$thread_no]);
}

do {
while (($execrun = curl_multi_exec ($mc, $running)) == CURLM_CALL_MULTI_PERFORM);
if ($execrun != CURLM_OK) break;
while ($done = curl_multi_info_read ($mc))
{
$info = curl_getinfo ($done ['handle']);
if ($info ['http_code'] == 301) {
echo trim ($proxies [array_search ($done['handle'], $c)])."\r\n";
}
curl_multi_remove_handle ($mc, $done ['handle']);
}
} while ($running);
curl_multi_close ($mc);
?>