2012-02-28 85 views
3

我正在编写一个需要很多代理才能工作的web应用程序。 我也有一个代理列表,但我不知道它们中的哪些是可行的,它们是什么类型(袜子,http,https)。使用PHP检查代理服务器

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

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

+0

你应该张贴您的代码,它可以是你在你做的检查方法有巨量还是有些问题。 – hakre 2012-02-28 07:53:03

回答

1

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

1

端口通常会给你一个关于代理类型的好消息。
80,8080,3128通常是HTTP
1080是典型的SOCKS

但是让我们面对现实,你似乎有公共代理的列表。每个人不再不可能工作。
您可以使用卷曲wget的山猫在脚本或类似的测试代理。

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

但请记住我所说的,如果你有一个5000个随机代理的列表,我敢打赌,你几乎找不到超过10个工作在那里的代理。公共代理只是短暂的。

1

This proxy checker API可能正是你在找什么。你可以很容易地检查一个代理列表。

如果你想自己开发它,做一个小脚本来做同样的事情并不困难。

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

根据您所做的更改编辑答案。 – Avijit 2013-12-23 13:32:20