Тел.: +7 (495) 749 43 55

Полезные статьи

Статьи
ИНТЕРНЕТ ТЕХНОЛОГИИ
НОВОСТИ

СТАТЬИ




Передача данных из скрипта методом POST


Передача данных из скрипта методом POST
08-05-2007
сайт автора: http://webi.ru
публикация данной статьи разрешена только с соблюдением копирайтов

 

В этой статье я расскажу как отправлять данные из php скрипта методом POST так, как это делает обычная html форма. Необходимость в этом может возникнуть для отправки данных как на свой сайт, так и на чужой. В примере используются стандартные функции php.

Сначала нужно сформировать переменные и их значения, которые будем отправлять. Для этого составляем обычную строку, в которой прописываем переменные по тому же принципу, что и при передаче переменных в ссылке. Например:
$data="var=test&var2=privet";
В данном примере используются две переменные(var и var2), первая имеет значение "test" вторая "privet". Можете продолжать список переменных, разделяя их символом `&`.

Теперь нужно сформировать данные для отправки на сервер. Создаем еще одну текстовую переменную $out.

$out = "POST /file.php HTTP/1.1\n"; // здесь указываем какой файл запрашиваем и какой метод передачи данных будет использован. В данном примере вызывается файл file.php. Здесь нужно указывать путь до файла от корневой директории сайта (/path/file.php)

$out .= "Host: test.ru\n"; // тут указывается хост с которым будем соединяться (адрес вашего сайта)
$out .= "Referer: test.ru/\n"; // откуда идет отправка данных
$out .= "User-Agent: Opera\n"; // каким браузером притвориться
$out .= "Content-Type: application/x-www-form-urlencoded\n"; // это тип отправляемых данных из формы. Такой тип данных стоит у форм по умолчанию.

$out .= "Content-Length: ".strlen($data)."\n\n"; // здесь указывается размер передаваемых данных....
$out .= $data."\n\n"; // создаем полный набор данных для отправки.

Строка $out готова для отправки данных на сайт.
Остается только открыть соединение с сервером и кинуть ему эти данные.

Делается это так:
$fp = fsockopen("test.ru", 80, $errno, $errstr, 10);
В качестве параметров этой функции указываем хост для соединения(test.ru).
Затем порт (80), как правило другой номер порта используется редко.
$errno и $errstr получают установки, указывающие фактический уровень системной ошибки, в случае ошибки соединения, особой необходимости в них нет.
И последняя цифра (10) - это таймаут соединения, то есть сколько секунд будет ждать скрипт установки соединения.

Итак, соединение с хостом открыто.
Передаем открытому соединению созданные данные:
fputs($fp, $out);
Вот и все... Осталось закрыть соединение:
fclose($fp);
Переменные
var=test
и
var2=privet
улетели по адресу http://test.ru/file.php методом POST, так же, как это сделала бы html форма.

А вот и полный листинг:

<?
$data
="var=test&var2=privet";
$fp = fsockopen("test.ru", 80, $errno, $errstr, 10);
$out = "POST /file.php HTTP/1.1\n";
$out .= "Host: test.ru\n";
$out .= "Referer: test.ru/\n";
$out .= "User-Agent: Opera\n";
$out .= "Content-Type: application/x-www-form-urlencoded\n";
$out .= "Content-Length: ".strlen($data)."\n\n";
$out .= $data."\n\n";
fputs($fp, $out);
fclose($fp);
?>

Это был самый простой пример, в нем я показал только принцип отправки данных.
Сейчас расширю данный пример, для демонстрации отправки данных методом POST и GET одновременно и получения ответа от сервера.

<?
$url
= "http://test.ru/patch/file.php?var=23&var2=54"; // это адрес, по которому скрипт передаст данные методом POST. Как видно, здесь указаны переменные, которые будут переданы через GET
$parse_url = parse_url($url); // при помощи этой функции разбиваем адрес на массив, который будет содержать хост, путь и список переменных.
$path = $parse_url["path"]; // путь до файла(/patch/file.php)
if($parse_url["query"]) // если есть список параметров
$path .= "?" . $parse_url["query"]; // добавляем к пути до файла список переменных(?var=23&var2=54)
$host= $parse_url["host"]; // тут получаем хост (test.ru)
$data = "var3=test&var4=".urlencode("еще тест"); // а вот тут создаем список переменных с параметрами. Эти данные будут переданы через POST. Все значения переменных обязательно нужно кодировать urlencode ("еще тест")

$fp = fsockopen($host, 80, $errno, $errstr, 10);
if (
$fp)
{

$out = "POST ".$path." HTTP/1.1\n";
$out .= "Host: ".$host."\n";
$out .= "Referer: ".$url."/\n";
$out .= "User-Agent: Operan";
$out .= "Content-Type: application/x-www-form-urlencoded\n";
$out .= "Content-Length: ".strlen($data)."\n\n";
$out .= $data."\n\n";

fputs($fp, $out); // отправляем данные

// после отправки данных можно получить ответ сервера и прочитать информацию выданную файлом, в который отправили данные...
// читаем данные построчно и выводим их. Конечно, эти данные можно использовать по своему усмотрению.
while($gets=fgets($fp,2048))
{
print
$gets;
}
fclose($fp);
}
?>

В этом примере файл file.php получил переменные:
GET var="23" и var2="54"
POST var3="test" и var4="еще тест"


Хочу обратить ваше внимание, данные передаваемые через POST или GET всегда передаются строкой(string), независимо от того, через форму они передаются или через скрипт.
Поэтому передавая число, помните, что в скрипт оно попадет как string.

 


WEBITEX
Rambler's Top100
Тел.: +7 (495) 749 43 55
E-mail: info@webitex.ru