Работа с прокси

Статус
В этой теме нельзя размещать новые ответы.

kenny182

Новичок
Доброго времени суток!
Я только недавно начал программировать на php и на данном этапе столкнулся с некоторыми проблемами.
Программа состоит из двух скриптов. Первый является формой, в которой задается url, метод передачи данных, и сами данные.
PHP:
<html>

<head>
  <title></title>
</head>

<body>

<form method="POST" action='filled_vote_voter_test.php'>

	URL:
        <input type='text' name = 'url'>

        <br>

        Method:
        <select name=method size="1">
		<option value="get">GET</option>
		<option value="post">POST</option>
	</select>

        <br>

        Data:
        <input type='text' name = 'data'>

        <br>

        <input type='submit' value = 'Finish'>

</form>

</body>

</html>
во втором мы открываем сокет через прокси и передаем указанные данные, указанным методом указанному обработчику.
PHP:
<?php
	include "functions.php";

        // считывание переменных.
        $url_arr = parse_url($_POST['url']);
	$host = $url_arr['host'];
	$path = $url_arr['path'];

        //  получение списка прокси-серверов в формате server:port.
        $proxy_arr = get_proxy('proxy.txt');

        // цикл для работы с прокси-серверами.
        for($i = 0; $i < count($proxy_arr); $i++)
        {
                // разделение адреса сервера на host и port.
        	$usable_proxy_arr = explode(':', $proxy_arr[$i]);
        	$proxy_host = $usable_proxy_arr[0];
        	$proxy_port = $usable_proxy_arr[1];


		// передаваемые данные.
       		$data=$_POST['data'];

                // действия, в зависимости от заданного метода.
		if($_POST['method'] == post)
		{
			// открываем сокет через заданный прокси.
			$fp = @fsockopen("tcp://".$proxy_host, $proxy_port, $errno, $errstr, 10);

			if (!$fp)
			{
        	        	print_r($errstr.':'.$errno);
			}
			else
	 		{
    	 			$out  = "POST $path HTTP/1.0\r\n";
    				$out .= "Host: $host\r\n";
    				// указываем что это пост данные.
    				$out .= "Content-type: application/x-www-form-urlencoded\r\n";
    				//указываем количество байт
   				$out .= "Content-Length: ". strlen($data) ."\r\n";
    				$out .= "Connection: Close\r\n\r\n";

    				// посылаем данные.
    				fwrite($fp, $out.$data);

    				/*$headers='';

    				//читаем заголовки
    				while ($str = trim(fgets($fp, 4096)))
    				$headers .= "$str\n";

    				$body='';

    				//читаем ответ
    				while (!feof($fp))
    				$body.= fgets($fp, 4096);*/

    				//закрываем сокет
    				fclose($fp);
			}

			//выводим данные
			//echo $headers.'<hr/>'.$body;
		}
		else
		{
			//открываем сокет
			$fp = @fsockopen("tcp://".$proxy_host, $proxy_port, $errno, $errstr, 10);
			if (!$fp)
			{
   				die($errstr.':'.$errno);
			}
			else
			{
    				$out  = "GET $path HTTP/1.0\r\n";
    				$out .= "Host: $host\r\n";
    				$out .= "Connection: Close\r\n\r\n";

    				//посылаем данные
    				fwrite($fp, $out.$data);

    				$headers='';

    				//читаем заголовки
    				while ($str = trim(fgets($fp, 4096)))
    				$headers .= "$str\n";

    				$body='';

    				//читаем ответ
    				while (!feof($fp))
    				$body.= fgets($fp, 4096);

    				//закрываем сокет
    				fclose($fp);
			}

		//выводим данные
		echo $headers.'<hr/>'.$body;
		}
        }



?>
В файле functions.php описана функция get_proxy():
PHP:
<?php
        // функция для считывания прокси серверов из файла.
	function get_proxy($name_text_file)
	{
 		$fd = fopen("proxy.txt", "r");
 	        flock($fd, LOCK_SH);
 	        $str = fread($fd, 1342177);
 	        fclose($fd);
  	        $proxy_arr = explode(' ', $str);
                return $proxy_arr;
	}
?>
И возникшие проблемы:
1)Не подключается к прокси;
2)не работает передача данных методом get.
 

Absinthe

жожо
А зачем использовать прокси?
Почему не можешь присоединиться напрямую к ресурсу?
 

kenny182

Новичок
потому, что в задании сказано работать через прокси. И даже если подключаться напрямую, работает только метод post.
 

kenny182

Новичок
Я все вышеперечисленное сделал. Работать прога не начала. Кстати, забыл отметить. После запуска программа проходит только через 15 прокси завершает работу и пишет в браузер
php_network_getaddresses: getaddrinfo failed: Этот хост неизвестен. :0php_network_getaddresses: getaddrinfo failed: Этот хост неизвестен. :0php_network_getaddresses: getaddrinfo failed: Этот хост неизвестен. :0php_network_getaddresses: getaddrinfo failed: Этот хост неизвестен. :0php_network_getaddresses: getaddrinfo failed: Этот хост неизвестен. :0php_network_getaddresses: getaddrinfo failed: Этот хост неизвестен. :0php_network_getaddresses: getaddrinfo failed: Этот хост неизвестен. :0php_network_getaddresses: getaddrinfo failed: Этот хост неизвестен. :0php_network_getaddresses: getaddrinfo failed: Этот хост неизвестен. :0php_network_getaddresses: getaddrinfo failed: Этот хост неизвестен. :0php_network_getaddresses: getaddrinfo failed: Этот хост неизвестен. :0php_network_getaddresses: getaddrinfo failed: Этот хост неизвестен. :0php_network_getaddresses: getaddrinfo failed: Этот хост неизвестен. :0php_network_getaddresses: getaddrinfo failed: Этот хост неизвестен. :0php_network_getaddresses: getaddrinfo failed: Этот хост неизвестен. :0
 

kenny182

Новичок
С curl я тоже пробовал делать. Писал примерно следующим образом
PHP:
$ch = curl_init();
curl_setopt($ch, CURLOPT_PROXY, $proxy);
// вместо $proxy писал, например, 82.79.132.73:80 , и далее открывал сокет и действовал как в программе.
curl_close ($ch);
Отвечает каждый раз по разному. То требуемый url не допустим, то просит попробовать подключиться по-позже, то говорит что превышен лимит времени.
 

kenny182

Новичок
Я на столько новичек что не знаю что и думать, но в списке у меня довольно много прокси серверов, и некоторые я проверял, чтоб рабочие были. Опять же он почему-то проходит только первые 15.
 

fixxxer

К.О.
Партнер клуба
закройте уже тему, понятно, что человек непотребствами занимается типа парсинга или спама
 

kenny182

Новичок
честное слово не связан с этими темными делами. По-моему я слишком лох в php чтоб этим заниматься. Мне в универе такое задание дали.
 

kenny182

Новичок
я думаю не надо быть гением, чтобы в поисковике найти список проксей.
 

fixxxer

К.О.
Партнер клуба
надо быть гением, чтобы дать студентам задачу, для реализации которой требуется совершать уголовное преступление
 

Фанат

oncle terrible
Команда форума
Тема закрыта

Варез, взлом, кража контента и другие противоправные действия запрещены к обсуждению на форуме.
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху