使用PHP检查代理

时间:2012-02-28 07:40:10

标签: php proxy

我正在编写一个需要大量代理才能运行的网络应用。 我也有一个代理列表,但我不知道它们中哪些有用,它们是什么类型(socks,http,https)。

假设我有5个ip:port格式的代理。 检查所有这些的最快方法是什么?

我尝试过fsockopen,但速度很慢。 也许先ping他们会节省时间吗?

5 个答案:

答案 0 :(得分:3)

<?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);
?>

答案 1 :(得分:1)

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

答案 2 :(得分:1)

端口通常会为您提供有关代理类型的良好线索 80,8080,3128通常是HTTP
1080通常是SOCKS

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

您也可以尝试将列表分类为SOCKS和HTTP,并将其输入the Proxycollective。 这是一个免费的项目,但你需要一个邀请码或一张99%的门票才能成为会员。 成为会员后,您可以上传代理列表,然后对其进行测试。所有工作的人都将退还给您 因此,如果您不想自己编程,这可能是您最好的选择,有时可以在各种论坛中找到邀请码。

但请记住我说的话,如果你有5000个随机代理的列表,我打赌你再也找不到10个以上的工作了。公共代理人只能短暂。

答案 3 :(得分:1)

proxy checker API 可能正是您所需要的。您可以轻松地检查代理列表。

如果你想自己开发它,那么做一个小脚本并不难做到与API相同。

答案 4 :(得分:0)

这是我使用的代码。您可以对其进行修改以满足您的要求:

    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;  
}