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

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

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.
 
А зачем использовать прокси?
Почему не можешь присоединиться напрямую к ресурсу?
 
потому, что в задании сказано работать через прокси. И даже если подключаться напрямую, работает только метод post.
 
Я все вышеперечисленное сделал. Работать прога не начала. Кстати, забыл отметить. После запуска программа проходит только через 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
 
С curl я тоже пробовал делать. Писал примерно следующим образом
PHP:
$ch = curl_init();
curl_setopt($ch, CURLOPT_PROXY, $proxy);
// вместо $proxy писал, например, 82.79.132.73:80 , и далее открывал сокет и действовал как в программе.
curl_close ($ch);
Отвечает каждый раз по разному. То требуемый url не допустим, то просит попробовать подключиться по-позже, то говорит что превышен лимит времени.
 
Я на столько новичек что не знаю что и думать, но в списке у меня довольно много прокси серверов, и некоторые я проверял, чтоб рабочие были. Опять же он почему-то проходит только первые 15.
 
закройте уже тему, понятно, что человек непотребствами занимается типа парсинга или спама
 
честное слово не связан с этими темными делами. По-моему я слишком лох в php чтоб этим заниматься. Мне в универе такое задание дали.
 
я думаю не надо быть гением, чтобы в поисковике найти список проксей.
 
надо быть гением, чтобы дать студентам задачу, для реализации которой требуется совершать уголовное преступление
 
Тема закрыта

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