Есть, например, такой запрос: Code: <? $proxy = "217.219.192.69"; $port = "80"; $host = "http://site.ru"; $path = "/"; $fp = @fsockopen($proxy, $port, $errno, $errstr, 10); if($fp) { $headers = "GET $path HTTP/1.1\r\n"; $headers.= "Host: $host\r\n"; $headers.= "Connection: Close\r\n\r\n"; fwrite($fp, $headers); while(!feof($fp)) { echo fread($fp,1024); } fclose($fp); } else { echo "$errno $errstr"; } ?> Как сделать, чтобы прокси брались из файла, например, proxy.txt, потом разделялись на прокси и порт, проверялись, если нормально - юзались в запросе, если нет - бралась следующая строка из proxy.txt? Спасибо!
PHP: $file = file('proxies.txt'); // Файл с проксями list($proxy, $port) = explode(":", trim($file)); // Теперь $proxy - сервер прокси, до двоеточия, а порт = порт, после двоеточия
ну или так:: PHP: //массив проксей (в файле прокси разделены '\n'), порт и хост разделены ':' $f_proxy = fopen('proxy.txt', r); $proxy = fread($f_proxy, 65000); $proxy_server = explode("\n", $proxy); $n=count($proxy_server); for ($i=0; $i<=count($proxy_server)-1; $i++) { $proxy_serv[$i] = explode(":", $proxy_server[$i]); } fclose($f_proxy); Здесь ты получаешь из файла 'proxy.txt' двумерный массив ($proxy_serv) вида: HTML: array [1 => 1 - ip 2 - port 2 => ...] PHP: <? $host = "http://site.ru"; $path = "/"; //массив проксей (в файле прокси разделены '\n'), порт и хост разделены ':' $f_proxy = fopen('proxy.txt', r); $proxy = fread($f_proxy, 65000); $proxy_server = explode("\n", $proxy); $n=count($proxy_server); for ($i=0; $i<=count($proxy_server)-1; $i++) { $proxy_serv[$i] = explode(":", $proxy_server[$i]); } fclose($f_proxy); for ($i=0; $i<count($proxy_serv); $i++) { $fp = fsockopen($proxy_serv[$i][1], $proxy_serv[$i][2], $errno, $errstr, 10); if($fp) // ;) { $headers = "GET $path HTTP/1.1\r\n"; $headers.= "Host: $host\r\n"; $headers.= "Connection: Close\r\n\r\n"; fwrite($fp, $headers); while(!feof($fp)) { $rez_data = fread($fp,1024); // здесь код для обработки ответа //... } fclose($fp); } else { echo "$errno $errstr"; } } ?> зы::Разницы никакой, 2-ой код используется в начале скрипта, а далее использйется массив, 1-ый код использутся каждый раз в при открытиии сокета.
Че-то нифига у меня не получается... Скрипт такой: Code: <?php $usver = file("names.txt"); $parol = file("pass.txt"); foreach ($usver as $i=>$v) { $hostname = "site.com"; $path = "/login"; $line = ""; $fp = fsockopen($hostname, 80, $errno, $errstr, 30); if (!$fp) echo "$errstr ($errno)<br />\n"; else { //пошел пост запрос //............... //.............. } fclose($fp); //потом гет запрос //............... //.............. //потом еще один пост запрос //............... //.............. Пытался сделать, чтобы каждый пользователь, типа, подключался под разным IP. Ткните носом, где посмотреть конкретный пример с использованием списка проксей из файлика и проверкой их на коннект. Или, если кому не влом, приведите код тут. С меня репа! Спасибо!
2) ВЫШЕ я уже приводил код использование списка прокси, хранящихся в файле PHP: $f_proxy = fopen('proxy.txt', r); $proxy = fread($f_proxy, 65000); $proxy_server = explode("\n", $proxy); $n=count($proxy_server); for ($i=0; $i<=count($proxy_server)-1; $i++) { $proxy_serv[$i] = explode(":", $proxy_server[$i]); } fclose($f_proxy); На выходе ты получаешь массив $proxy_serv далее его и используешь, код вывода разных проксей из массива я приводил выШЕ!! (в цикле) проверка на соединение ты и так уже написал:: PHP: ... if (!$fp) echo "$errstr ($errno)<br />\n"; ... можно также дополнить времением ожидания ответа.. зы:: по поводу первого сорь, обознался, перепутал file() с fread()..
Не понял. Скрипт выдирает из файлов переменные построчно и юзает их. я привел код скрипта не полностью, а для примера. Без проксей все работает на ура. Сейчас хочу, чтобы подключался через проксю. Пробовал заюзать код выше - не получается.
что именно не получается??? выложи код! выложи ошибки!! если не хочешь выкладывать здесь, стучи в асю, посмотрим что не так зы:: пост ниже кстати, верен тоже, этот параметр необходим
кстати, так как это прокси-запрос, лучше для совместимости в начало $path приписывать 'http://'.$host
PHP: $f_proxy = fopen('proxy.txt', r); $proxy = fread($f_proxy, 65000); $proxy_server = explode("\n", $proxy); $n=count($proxy_server); for ($i=0; $i<=count($proxy_server)-1; $i++) { $proxy_serv[$i] = explode(":", $proxy_server[$i]); } fclose($f_proxy); Садо-мазо клуб? PHP: <?php // Формат proxy_list.txt: на каждой строчке данные о прокси в формате IP:PORT // Пример: 10.10.10.10:8080 $list = file('proxy_list.txt'); foreach ($list as $proxy) { list($ip, $port) = explode(':', $proxy); myFunction($ip, $port); } ?>
Мде. Старая тема - если файл большой? PHP: <? $f = fopen('proxy.txt','r'); while($proxy = fgets($f)) { $proxy = explode(':',$proxy); //$proxy = Array('ip','port') } fclose($f); ?>
Вот, не поленился написать полностью скрипт проверки прокси: PHP: <?php // Proxy Checker // By SpeedHack // Options // Слеш после хоста обязателен, т.е. написать просто http://site.ru нельзя $url = 'http://site.ru/'; $timeout = 15; // EOL define('EOL', "\n"); // Proxy check function // Входящие параметры: IP, порт, URL тест-сайта, таймаут соединение (по умолчанию 30) function checkProxy ($ip, $port, $url, $timeout = 30) { if ($fp = fsockopen($ip, $port, $errno, $errstr, $timeout)) { $info = parse_url($url); $headers = 'GET ' . $info['path'] . ' HTTP/1.0' . EOL; $headers .= 'Host: ' . $info['host'] . EOL; $headers .= 'Connection: Close' . EOL . EOL; fwrite($fp, $headers); $buffer = ''; while (!feof($fp)) { $buffer .= fread($fp, 1024); } fclose($fp); // Тут можно вставить свое условие для проверки // Я для примера вставил условие, которое является истинов при // Нахождении в полученных данных слова 'OK' return (strpos($buffer, 'OK') !== false) ? true : false; } else { return false; } } $list = file('proxy_list.txt'); foreach ($list as $proxy) { list($ip, $port) = explode(':', rtrim($proxy)); echo 'Proxy ' . rtrim($proxy) . ': '; echo (checkProxy($ip, $port, $timeout)) ? '<font color="green">OnLine</font>' : '<font color="red">OffLine</font>'; echo '<br />' . EOL; } ?>
Лично тестировал file на 80 000 строчном файле - как с куста. Не думаю что прокси будет больше. На крайний случай, вместо fopen есть file_get_contents.