PDA

Просмотр полной версии : Парсер и чекалка проксей!


DIAgen
02.05.2007, 11:12
Пишу скрипт по парсеру и чекалке проксей, накатал быстро скрипт, только он гад такой работает сильно долго... Если кто-нибудь сможет переделать его и увеличить буду очень блогодарен. Срочно нужно....
<?php

set_time_limit(0);

$fp = fsockopen("proxy.shternov.ru", 80, $errno, $errstr, 30);
if ($fp)
{
$out = "GET / HTTP/1.1\r\n";
$out .= "Host: proxy.shternov.ru\r\n";
$out .= "Connection: Close\r\n\r\n";

fwrite($fp, $out);

$fgets = '';
$content = '';


while(!feof($fp))
{
$content .= fread($fp,8192);
}

fclose($fp);


preg_match_all ("#(bgcolor=\#FFFFFF><td>)(.*?)(<\/td><td>)(.*?)(<\/td><td title=)#si", $content, $matche1);

$count_proxy = count($matche1[2]);

for ($i = 0; $i <= $count_proxy; $i++)
{

$fp = fsockopen($matche1[2][$i], $matche1[4][$i], $errno, $errstr, 30);

if ($fp)
{

$out = "GET http://www.ya.ru/ HTTP/1.1\r\n";
$out .= "Host: ya.ru\r\n";
$out .= "Connection: Close\r\n\r\n";

fwrite($fp, $out);

$fgets = '';
$content = '';


while(!feof($fp))
{
$content .= fread($fp,8192);
}

fclose($fp);
preg_match_all ("#(<title>)(.*?)(<\/title>)#si", $content, $matche1);

if($matche1['2']['0'] == 'Яndex')
{

// echo "$matche1[2][$i]:$matche1[4][$i]<br>".flush();

$file = fopen ("proxy/proxy.txt","a+");
$str = "$matche1[2][$i]:$matche1[4][$i]\n";
if ( $file )
{
fputs ( $file, $str);
}
fclose ($file);
}
}
}
}
?>

Slon
02.05.2007, 11:51
http://forum.aoh.name//index.php?act=ST&f=22&t=121&st=0

Многопоточная чекалка проксей от AOH

Работает как по списку проксей так и по диапозону
Тестировпалась в nix осях. В винде работает немного дольше

KSURi
02.05.2007, 12:10
2Slon
Он вообще-то на Perl написан, а там интерфейс для создания потоков есть, в отличие от PHP. Про "переделку в cgi": сотри и подумай, что написал.

2DIAgen
Погугли на тему "пул неблокирующих сокетов"

+toxa+
02.05.2007, 13:12
http://helllabs.net/

DIAgen
02.05.2007, 13:25
http://helllabs.net/
Тоха мне надо что бы скрипт лежал на серваке и все сам делал через крон...

blackybr
02.05.2007, 15:52
Не советоал бы чекер делать на пхп) скорость не ахти )

DIAgen
03.05.2007, 10:26
Не советоал бы чекер делать на пхп) скорость не ахти )
По идеи мне скорость не нужна, просто мне нужны живые прокся, и проверка будет идти раз в сутки и все, сейчас буду разбераться, может что-нибудь смого придумать....

nc.STRIEM
03.05.2007, 12:41
$fp = fsockopen($matche1[2][$i], $matche1[4][$i], $errno, $errstr, 30);

Лимит времени поставь меньше, есле прокся мертвая незачем 30 секунд ждать. достаточно 3


while(!feof($fp))
{
$content .= fread($fp,8192);
}

preg_match_all ("#(<title>)(.*?)(<\/title>)#si", $content, $matche1);

if($matche1['2']['0'] == 'Яndex')

а не проще ли проверять номер статуса страницы? 200 OK

и тогда не обязательно всю страницу грузить! достаточно загрузить первую строку.


if(strstr(fgets($fp),'200 OK'))
.....