Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.10.2010, 08:29   #1
gamer123
Пользователь
 
Регистрация: 19.01.2008
Сообщений: 92
По умолчанию Прокси грабер-чекер

Долго искал чтото похожее, везде по отдельности, тут нашел все сразу в одном грабер прокси и чекер, но чтото не получается его завести

Код:
<?php
/* Назначение: Получение рабочих прокси серверов по списку URl сайтов с прокси-листами. Проверка прокси многопоточная.
 * Автор:         phpdreamer
 * Дата:           14.05.2010
*/
set_time_limit(0);

$filename = 'sitesproxy.txt'; //файл с списком URL сайтов с прокси листами

$n = 15; //количество потоков при проверке проксей
$regular = '#[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}:[0-9]{2,5}#'; 
$ban = array();
$proxy = array();
foreach(file($filename) as $url)
{
	$url = trim($url);
	$page = curlPage($url);
	preg_match_all($regular,$page,$p);
	//если на сайте нет проксей, заносим его в бан - там наверно есть защита от парсинга на javascript'е
	if(!count($p[0]))
		$ban[] = $url ;
	else
		$proxy = $proxy +$p[0];
}
$proxies = array_values( array_unique($proxy) );
$countProxy = count ($proxies);
if($countProxy<=$n)
{
	chk($proxies);
}
else
{
	$c = floor($countProxy/$n);
	for($i=1; $i<=$c; $i++)
		chk(array_slice($proxies,$n*$i,$n));
	chk(array_slice($proxies,$n*($c+1),$countProxy - $n*$c));
}
if(count($ban)==1)
	echo '<hr>Сайт не принес пользы: ' . $ban[0];
if(count($ban)>1)
{
	echo '<hr>Сайты не приносят пользы:<br>';
	foreach($ban as $sitename)
		echo $sitename.'<br>';
}
function chk($proxies)
{
	$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)])."<br>\r\n";
			curl_multi_remove_handle ($mc, $done ['handle']);
		}
	} while ($running);
	curl_multi_close ($mc);
}

function curlPage($url) //curl
{
	if( !function_exists('curl_init'))
		die('На сервере не установлено или отключено расширение cURL. Скрипт завершил работу.');
	$curl = curl_init();
	curl_setopt($curl,CURLOPT_URL,$url);
	curl_setopt($curl,CURLOPT_RETURNTRANSFER,true);
	curl_setopt($curl,CURLOPT_FOLLOWLOCATION,true);
	curl_setopt($curl, CURLOPT_HTTPHEADER, array(
	'Accept-Language: ru,en-us;q=0.7,en;q=0.3',
	'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8,application/json',
	'User-Agent: Mozilla/5.0 (X11; U; Gentoo-Linux; ru; rv:1.9.2.3)socks-php-bot Gecko/20100404  Firefox/3.7.0 GTB7.0',
	'Accept-Encoding: deflate',
	'Accept-Charset: UTF-8,*'));
	curl_setopt($curl,CURLOPT_CONNECTTIMEOUT,300);
	return curl_exec($curl);
}
?>
По идее должен грабить прокси с сайтов указанных в текстовике, потом их чекать (и не понятно куда дальше - писать гуды в файл или выводить на странице). Просьба указать на баги в коде, оч хочется чотбы заработал

P.S. скрипт просто работает бесконечно без каких либо видимых результатов

P.S.S. если не сложно, пните в сторону того, чтобы в скрипт добавить сортировку проксов по файлам socks4,5, http
gamer123 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Грабер проксей на делфи Lemo Общие вопросы Delphi 7 15.06.2010 14:04
Прокси чекер Pasha_Sh Работа с сетью в Delphi 1 14.06.2010 12:45
грабер Maxsim H. Общие вопросы C/C++ 4 16.01.2010 18:11
Прокси чекер Terikon Работа с сетью в Delphi 50 07.05.2009 17:54