kenny182
Новичок
Доброго времени суток!
Я только недавно начал программировать на php и на данном этапе столкнулся с некоторыми проблемами.
Программа состоит из двух скриптов. Первый является формой, в которой задается url, метод передачи данных, и сами данные.
во втором мы открываем сокет через прокси и передаем указанные данные, указанным методом указанному обработчику.
В файле functions.php описана функция get_proxy():
И возникшие проблемы:
1)Не подключается к прокси;
2)не работает передача данных методом get.
Я только недавно начал программировать на 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;
}
}
?>
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.