PDA

Просмотр полной версии : Post/get запрос через прокси


beerbear
22.04.2007, 02:51
Есть, например, такой запрос:


<?
$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?

Спасибо!

Isis
22.04.2007, 03:08
$file = file('proxies.txt'); // Файл с проксями
list($proxy, $port) = explode(":", trim($file)); // Теперь $proxy - сервер прокси, до двоеточия, а порт = порт, после двоеточия

mR_LiNK[deface_0nl
22.04.2007, 04:17
$file = file('proxies.txt'); // Файл с проксями
list($proxy, $port) = explode(":", trim($file)); // Теперь $proxy - сервер прокси, до двоеточия, а порт = порт, после двоеточия


ну или так::
//массив проксей (в файле прокси разделены '\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) вида:
array [1 => 1 - ip
2 - port
2 => ...]

<?
$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-ый код использутся каждый раз в при открытиии сокета.

blackybr
22.04.2007, 11:20
2ой более экономичный к ресурсам =)

beerbear
24.04.2007, 23:36
Че-то нифига у меня не получается...

Скрипт такой:


<?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.
Ткните носом, где посмотреть конкретный пример с использованием списка проксей из файлика и проверкой их на коннект.

Или, если кому не влом, приведите код тут.
С меня репа! Спасибо!

mR_LiNK[deface_0nl
24.04.2007, 23:59
2) ВЫШЕ я уже приводил код использование списка прокси, хранящихся в файле
$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
далее его и используешь, код вывода разных проксей из массива я приводил выШЕ!! (в цикле)

проверка на соединение ты и так уже написал::

...
if (!$fp) echo "$errstr ($errno)<br />\n";
...

можно также дополнить времением ожидания ответа..

зы:: по поводу первого сорь, обознался, перепутал file() с fread()..

beerbear
25.04.2007, 00:05
Не понял. Скрипт выдирает из файлов переменные построчно и юзает их. я привел код скрипта не полностью, а для примера.
Без проксей все работает на ура. Сейчас хочу, чтобы подключался через проксю. Пробовал заюзать код выше - не получается.

mR_LiNK[deface_0nl
25.04.2007, 00:13
Не понял. Скрипт выдирает из файлов переменные построчно и юзает их. я привел код скрипта не полностью, а для примера.
Без проксей все работает на ура. Сейчас хочу, чтобы подключался через проксю. Пробовал заюзать код выше - не получается.

что именно не получается???
выложи код!
выложи ошибки!!

если не хочешь выкладывать здесь, стучи в асю, посмотрим что не так

зы:: пост ниже кстати, верен тоже, этот параметр необходим

SMiX
25.04.2007, 00:19
Нужен хеадер
Proxy-Connection: close

mR_LiNK[deface_0nl
25.04.2007, 12:05
2beerbear
тебе сюда http://www.forum.antichat.ru/thread38811.html

зы: много лучше, чем то что выше!

hackconnect
26.04.2007, 20:35
кстати, так как это прокси-запрос, лучше для совместимости в начало $path приписывать 'http://'.$host

Developer
27.04.2007, 21:00
$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

// Формат 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);
}

?>

SMiX
27.04.2007, 21:11
Мде. Старая тема - если файл большой?

<?
$f = fopen('proxy.txt','r');
while($proxy = fgets($f))
{
$proxy = explode(':',$proxy);
//$proxy = Array('ip','port')

}
fclose($f);
?>

Developer
27.04.2007, 21:21
Вот, не поленился написать полностью скрипт проверки прокси:

<?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;
}

?>

Developer
27.04.2007, 21:23
Мде. Старая тема - если файл большой?

Лично тестировал file на 80 000 строчном файле - как с куста. Не думаю что прокси будет больше. На крайний случай, вместо fopen есть file_get_contents.