使用PHP检查代理服务器
我正在编写一个需要很多代理才能工作的web应用程序。 我也有一个代理列表,但我不知道它们中的哪些是可行的,它们是什么类型(袜子,http,https)。使用PHP检查代理服务器
假设我在ip:port格式中有5000个代理。 什么是检查所有这些的最快方法?
我试过fsockopen,但速度很慢。 也许先ping他们会节省时间吗?
端口通常会给你一个关于代理类型的好消息。
80,8080,3128通常是HTTP
1080是典型的SOCKS
但是让我们面对现实,你似乎有公共代理的列表。每个人不再不可能工作。
您可以使用卷曲或wget的或山猫在脚本或类似的测试代理。
您也可以尝试将您的列表分类为SOCKS和HTTP,并将其输入到the Proxycollective。 这是一个免费的项目,但你需要一个邀请码或99票才能成为会员。 一旦你是成员,你可以上传你的代理名单,他们将被测试。所有工作的人都会被退还给你。
所以,如果你不想自己编程这可能是你最好的选择,有时可以在各种论坛中找到邀请码。
但请记住我所说的,如果你有一个5000个随机代理的列表,我敢打赌,你几乎找不到超过10个工作在那里的代理。公共代理只是短暂的。
<?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);
?>
根据您所做的更改编辑答案。 – Avijit 2013-12-23 13:32:20
你应该张贴您的代码,它可以是你在你做的检查方法有巨量还是有些问题。 – hakre 2012-02-28 07:53:03