我正在编写一个需要大量代理才能运行的网络应用。 我也有一个代理列表,但我不知道它们中哪些有用,它们是什么类型(socks,http,https)。
假设我有5个ip:port格式的代理。 检查所有这些的最快方法是什么?
我尝试过fsockopen,但速度很慢。 也许先ping他们会节省时间吗?
答案 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;
}