Windows. Вирусы. Ноутбуки. Интернет. Office. Утилиты. Драйверы

Первый метод для выполнения PHP POST запроса заключается в использовании file_get_contents . Второй метод будет использовать fread в сочетании с парой других функций. Оба варианта применяют функцию stream_context_create , чтобы заполнить необходимые поля заголовка запроса.

Пояснение кода

Переменная $sPD содержит данные, которые нужно передать. Она должна иметь формат строки HTTP-запроса , поэтому некоторые специальные символы должны быть закодированы.

И в функции file_get_contents , и в функции fread у нас есть два новых параметра. Первый из них — use_include_path . Так как мы выполняем HTTP- запрос , в обоих примерах он будет иметь значение false . При использовании значения true для считывания локального ресурса функция будет искать файл по адресу include_path .

Второй параметр — context , он заполняется возвращаемым значением stream_context_create , который принимает значение массива $aHTTP .

Использование file_get_contents для выполнения POST-запросов

Чтобы в PHP отправить POST запрос с помощью file_get_contents , нужно применить stream_context_create , чтобы вручную заполнить поля заголовка и указать, какая «обертка » будет использоваться — в данном случае HTTP :

$sURL = "http://brugbart.com/Examples/http-post.php"; // URL-адрес POST $sPD = "name=Jacob&bench=150"; // Данные POST $aHTTP = array("http" => // Обертка, которая будет использоваться array("method" => "POST", // Метод запроса // Ниже задаются заголовки запроса "header" => "Content-type: application/x-www-form-urlencoded", "content" => $sPD)); $context = stream_context_create($aHTTP); $contents = file_get_contents($sURL, false, $context); echo $contents;

Использование fread для выполнения POST-запросов

Для выполнения POST-запросов можно использовать функцию fread . В следующем примере stream_context_create используется для составления необходимых заголовков HTTP-запроса :

$sURL = "http://brugbart.com/Examples/http-post.php"; // URL-адрес POST $sPD = "name=Jacob&bench=150"; // Данные POST $aHTTP = array("http" => // Обертка, которая будет использоваться array("method" => "POST", // Request Method // Ниже задаются заголовки запроса "header" => "Content-type: application/x-www-form-urlencoded", "content" => $sPD)); $context = stream_context_create($aHTTP); $handle = fopen($sURL, "r", false, $context); $contents = ""; while (!feof($handle)) { $contents .= fread($handle, 8192); } fclose($handle); echo $contents;

Выполнение GET-запросов с помощью PHP

Теперь мы уделим внимание использованию fread и file_get_contents для загрузки контента из интернета через HTTP и HTTPS . Чтобы использовать методы, описанные в этой статье, необходимо активировать опцию fopen wrappers . Для этого в файле php.ini нужно установить для параметра allow_url_fopen значение On .

Выполнение POST и GET запросов PHP применяется для входа в систему на сайтах, получения содержимого веб-страницы или проверки новых версий приложений. Мы расскажем, как выполнять простые HTTP-запросы .

Использование fread для загрузки или получения файлов через интернет

Помните, что считывание веб-страницы ограничивается доступной частью пакета. Так что нужно использовать функцию stream_get_contents (аналогичную file_get_contents ) или цикл while , чтобы считывать содержимое меньшими фрагментами до тех пор, пока не будет достигнут конец файла:

В данном случае обработки POST запроса PHP последний аргумент функции fread равен размеру фрагмента. Он, как правило, не должен быть больше, чем 8192 (8*1024 ).

Вы могли заметить, что на большинство сайтов можно лицезреть вот такие адреса:

Http://сайт/index.php?blog=2

Тут, даже не зная php, можно догадаться, что мы обращаемся к файлу index.php Но то, что идет после знака вопроса, мало кто знает. Все довольно просто: ?blog=2 это объявление глобальной переменной «$_GET["blog"]» с значением «2». Таким образом я в скрипт передаю переменную которая отвечает за вывод информации из базы данных. Давайте напишем небольшой скрипт в котором Вы все наглядно увидите:

if(isset($_GET["blog"])) {
echo $_GET["blog"];
}
?>

Мы используем оператор условий if() в качестве условия стоит вот такая строчка:

Isset($_GET["blog"])

isset() позволяет узнать существует ли переменная которая указана в скобках, то есть условие которое я описал в коде звучит так: Если существует переменная $_GET["blog"] то вывести содержимое этой переменной на экран. Вот что получилось:

Думаю понятно Создается глобальная переменная $_GET с идентификатором который мы объявили в адресной строке (в данном случае с идентификатором «blog» )

Теперь хочу пояснить один момент. Предположим нам необходимо объявить две переменные, как это сделать? Первая переменная объявляется после знака вопроса «?» Вторая же переменная объявляется после такого знака «&» (Если честно не знаю что это за знак ), вот пример объявление трех переменных:

Http://сайт/index.php?a=1&b=2&c=3

Вот код вывода:

if(isset($_GET["a"]) AND isset($_GET["b"]) AND isset($_GET["c"])) {
echo $_GET["a"]."
";
echo $_GET["b"]."
";
echo $_GET["c"]."
";
}
?>

Условие звучит так:

Если существует глобальная переменная $_GET["a"] и глобальная переменная $_GET["b"] и глобальная переменная $_GET["с"] то вывести их на экран , вот результат:

Формы

Прежде чем мы перейдем к post запросам, необходимо разобрать, что такое формы? Почему нужно? Потому что глобальная переменная $_POST[""] создается именно через формы. Что такое форма? Это поля для ввода какой-нить информации пользователем. Поля бывают в одну строчку, большие поля, так же бывают радио кнопочки, чек боксы. Разберем все по порядку...

Форма это тег:


элементы формы

У формы есть атрибуты, перечислю самые распространенные:

Давайте создадим форму:


элементы формы

В качестве файла обработчика я поставил файл test.php так как именно в нем пишу для Вас примеры. Метод отправки я поставил post так как именно этим методам пользуются в 99.9% случаях. Так же я присвоил нашей форме имя — form

Теперь окунемся в мир элементов формы. Первым делом Вы должны понять, что почти все элементы являются тегом отличие лишь в атрибуте type у этих тегов. Давайте я перечислю используемые элементы форм:

Я уверен, что вы не раз встречали такие поля, так что тут как говорится: «no comments»

Теперь давайте составим небольшую тренировочную анкету, с которой будем работать далее. Наша задача составить небольшую анкетку которая поведает нам имя заполнявшего, пол, из какой он страны, любимый цвет и поле текста где пользователь может добавить что-нить о себе. Вот что у меня получилось:

Ваше Фамилия Имя Отчество:

Ваш пол:
М
Ж

Из какой Вы страны



Любимый(ые) цвет(а):

Черный:
Красный:
Белый:
Другой:

О себе:




Обратите внимание, что почти у каждого тега есть атрибут value , для чего он? В него записываются данные которые Вы собираетесь перенести на другую страницу. Надеюсь понятно

Теперь если запустить этот код в браузере, то мы увидим следующее:

У формы я использовал атрибут action со значением test.php это означает, как я уже говорил, что данные из формы передадутся в файл test.php.

POST запрос

Теперь напишем php код который позволит нам увидеть введенную нами информацию. Где хранятся данные? В случае с get запросом, наши данные лежали в глобальной переменной $_GET[""]. При post запросе, данные будут лежать в глобальной переменной $_POST[""]. В квадратных скобках, необходимо прописывать, как и в случае с глобальной переменной get, идентификатор. Вопрос, где этот идентификатор взять? Вот для чего нам необходим атрибут name у элементов форм! Именно эти имена и служат нам ключом в глобальном массиве post. Ну что ж, приступим к описанию скрипта:

if(isset($_POST["submit"])) {
echo "ФИО: ".$_POST["fio"]."
";
echo "Пол: ".$_POST["sex"]."
";
echo "Страна проживания: ".$_POST["city"]."
";

Echo "Любимый(ые) цвет(а):
";
echo $_POST["color_1"]."
";
echo $_POST["color_2"]."
";
echo $_POST["color_3"]."
";
echo $_POST["color_4"]."
";
echo "О себе: ".$_POST["about"]."


";
}
?>

Написанное нами условие if гласит: Если существует глобальная переменная $_POST["submit"] то выводим данные на экран. Эта глобальная переменная создается в случае если мы нажали на кнопку отправки, вот для чего в данном примере необходим атрибут name в кнопке. Вы вполне можете задаться вопросом, почему же у кнопки атрибут name не обязательный? Все довольно просто. Обычно программист не отслеживает нажатие кнопки, а отслеживает посланные данные. Для корректной работы, например формы контактов, необходимо отследить не нажатие кнопки, а правильность ввода информации, и узнать вводили ли эту информацию вообще. В нашем же примере мы не проверяли посланные данные, а просто отследили нажатие кнопки, для упрощение примера... Вот что у нас получилось:

Заключение

Ну что ж, за сегодня мы разобрали два метода передачи данных между скриптами, так же галопам познакомились с формами. Очень надеюсь, что эта информация Вам хоть где то пригодится. Если есть какие вопросы, или мысли, пишите комментарии. Удачи Вам, на сегодня у меня все!

P.S.: Хотите что бы компьютерные игры стали еще более реалистичными? directx 11 для windows 7 скачать бесплатно можно на виндоус ин! Наслаждайтесь замечательной графикой!

Да да, все когда-то учились чему либо. Единственное что в этом плане отличает людей — кому-то учения даются легко, а кто-то не может разобраться в сути вопроса долгие месяцы. Сегодня мы поговорим о POST и GET запросах в HTML\PHP.

Сами запросы POST и GET (далее просто запросы) давно проросли корнями во все Интернет ресурсы. Если вдруг когда нибудь и появится альтернатива данным технологиям, то наверное это будет не скоро, да и, наверное, не нужно. Потому что наши запросы вполне полно выполняют задачу обмена данными между Интернет страницами.

Давайте рассмотри сначала запрос типа GET. Создадим файл index.php со стандартным html кодом, а так же разместим на нем форму, пусть это будет форма заказа товара.

Здесь обратим внимание на тег form . Он имеет два параметра action и method . Первый отвечает за адрес страницы, на которую мы будем передавать наши данные, второй — за метод, которым эти данные будут передаваться. Внутри данного тега описываются набор наших данных, которые мы хотим передавать. Обязательно данным присваиваются имена (параметр name ). Так же обязателен input типа submit , который является кнопкой, по нажатию на которую происходит отправка данных.

Давайте сохраним наш файл и откроем его в браузере.
Путь нашей страницы в браузере «…/index.php». На самой странице мы видим два поля для ввода и кнопку. Давайте вобъем в наши поля что-нибудь и нажмем на кнопку «Заказать». Наша страница обновилась. Давайте посмотрим на ее адрес: «…/index.php?orderName=Test&count=12». (я вбил в первое поле слово ‘Test’ во второе ’12’). Как мы видим адрес страницы немного поменялся. Дело в том что передача параметров GET запросом осуществляется путем их приписывания в строку адреса страницы. Параметры отделяются от основного адреса символом ‘?’, а разные параметры символом ‘&’. Структура параметров следующая: название_параметра=значение . Название параметра будет совпадать со значением атрибута name в поле input.
Давайте немного подредактируем код страницы:

> >

Теперь нажмем на кнопку «Заказать» еще раз. Как мы видим страница обновилась, однако наши поля остались заполнены. Это произошло благодаря тому, что мы указали значение по умолчанию для наших полей. Причем эти значения — полученный параметр GET. Как мы видим в PHP коде GET параметры являются массивом со строковым индексом равным имени параметра. Если сейчас поиграться с адресом сайта и в нем поменять значения параметров и нажать кнопку «Enter», то мы опять заметим картину с обновлением страницы и заполнением нашей формы.

Очевидно что пересылать секретные или служебные данные в GET запросе неправильно (и не безопасно). Его лучше использовать для передачи, например, id новости, которую стоит взять из базы или имени страницы, которую стоит отобразить.

Другое дело POST запрос. Работает он аналогично, однако не сохраняет параметры в строке адреса. Изменим нашу форму:

$_POST["orderName"] ?> > $_POST["count"] ?> >

Как видно изменилось не многое, Однако! Откроем нашу страницу, вобъем что-нибудь в поля и нажмем кнопку «Заказать». Все сработало аналогично, однако (однако), как мы видим в строке запросов красуется адрес «…/index.php» без всякого рода параметров. Таким образом мы как бы «скрыли» наши данные от посторонних глаз. Конечно понятие скрыли, достаточно условное, так как эти данные все равно можно перехватить, но это уже другая история. Давайте допишем в наш адрес параметры «…/index.php?orderName=Trololo&count=100» и нажмем «Enter». Как мы видим страница загрузилась, однако даже не смотря на передачу параметров, поля оказались пустые. Это говорит о том что несмотря на большую схожесть, данные виды запросов никак не пересекаются между собой и если есть необходимость стоит писать обработчик для каждого типа запроса отдельно.

Думаю на этом хватит. Азы вопроса, я думаю, описаны с головой.

И еще немного… Не стоит забывать о проверке передаваемых параметров. Если Вы точно знаете, что параметр должен являться числом, то присекайте все попытки передачи не числового значения и т.п…

В этом и следующих разделах будет кратко рассказано о том, как создавать простейшие веб-приложения с использованием PHP. Того, о чем было рассказано в разделе явно недостаточно, чтобы ваше приложение общалось с пользователем и формировало в зависимости от выполненных им действий или введенных им параметров. А чего не хватает? Не хватает знаний о том, как организовать пользовательский ввод данных и передачу этих данных на сервер. Ну а базовые знания о способах программной обработки полученной на сервере информации у вас уже должны быть.

Методы HTTP запросов и их параметры

Любое динамическое веб-приложение формирует ответ пользователю в соответствии с введенными им параметрами или выполненными действиями на стороне клиента. Обращение к серверу чаще всего сводится к двум видам запросов: с использованием метода GET или метода POST. Пару слов о различиях между двумя этими видами запросов.

Метод GET:

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

    Считается, что результаты нескольких, выполненных подряд одинаковых запросов GET должны быть одними и теми же.

Метод POST:

    Параметры запросов передаются в теле HTTP запроса, поэтому в командной строке их нет. Количество и размер параметров неограничен.

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

Метод GET следует использовать для извлечения содержимого информационного ресурса согласно параметрам, когда не требуется вносить изменения в структуры данных целевого ресурса, а запрос (URL) имеет смысл сохранять в закладках. Скорость выполнения метода GET может быть выше аналогичных запросов с использованием метода POST.

Метод POST следует использовать, когда необходимо скрыть из URL передаваемые на сервер параметры. Данный метод также следует использовать в запросах на изменения содержимого целевого ресурса, передавая в параметрах (в теле запроса) описание этих самых изменений.

Путь к ресурсу?параметр1=значение1&параметр2=значение2&…

Если у вас нет специальной HTML формы для заполнения параметров, то вы можете отладить работу вашего PHP приложения, передавая тестовые параметры прямо в командной строке браузера, например:

Http://сайт/php-samples/sql.php?sql=select * from d_staff

Для обращения к параметрам запроса на стороне сервера следует использовать глобальные массивы $_GET и $_POST соответственно. Если вашему приложению все равно, с использованием какого метода к нему обратились, то следует использовать массив $_REQUEST , который объединяет в себе данные массивов $_GET и $_POST, например, так:

$sql = isset($_REQUEST["sql"]) ? $_REQUEST["sql"] : "";

В этом примере программа определяет, был ли передан параметр “sql”: если да, то присваивает соответствующей переменной его значение, и если нет, то присваивает ей пустое значение.

Определение параметров HTTP запроса через HTML форму

Конечно, определять параметры вручную прямо в командной строке браузера не очень удобно. Такой способ подходит для программного выполнения HTTP запросов при общении веб-приложений между собой. Для того чтобы ввести и осуществить первоначальную проверку данных на стороне клиента следует использовать HTML формы и . Ниже приведен пример простейшей формы, с помощью которой вводится текстовый параметр (значение ), который впоследствии передается на сервер в качестве параметра метода POST.

method ="post" action =’sql.php’ > SQL:

В атрибуте method элемента form указывается метод, определяющий способ передачи данных на сервер (get или post). В атрибуте action указывается php файл , который будет обрабатывать запрос. Если обработчиком должен быть текущий файл, то атрибут action добавлять не нужно. Для всех элементов, чье значение должно быть передано в качестве параметра HTTP запроса следует определить уникальное значение атрибута name . Именно значение атрибута name будет являться индексом в массивах $_GET, $_POST или $_REQUEST (смотрите пример выше). Нажатие на кнопку submit отправляет форму со всеми введенными значениями на сервер.

Создание стандарта сети Интернет Web 2.0 позволило пользователю не только принимать информацию, но и активно взаимодействовать с другими пользователями и интернет-сервисами. Для организации такой обратной связи в язык HTML были введены дополнительные теги, позволяющие отправлять на сервер запрашиваемую информацию. Например, это может быть форма регистрации, или форма добавления комментария, или настройка личного аккаунта (страницы социальной сети) и т.п. В данной главе рассмотрим набор тегов, позволяющих организовывать взаимодействие пользователя с сайтом.

6.1. GET и POST-запросы

Для организации взаимодействия пользователя с сетью Интернет, разработчик сайта должен предусмотреть передачу запросов от пользователя сайта на сервер, где расположен данный сайт. Запросы бывают двух видов: GET- и POST-запросы.

GET -запросы

На раннем этапе развития сети Интернет существовали только GET-запросы. Они представляют собой передачу данных непосредственно в адресной строке браузера, имеющих следующий синтаксис:

http://домен/страница?[параметр1=значение1][&параметр2=значение2]...

Здесь набор передаваемых данных на сервер начинаются с символа ‘?’ и разделяются символом ‘&’. Сами данные представляют собой пары

параметр=значение

Например, если требуется передать имя и фамилию пользователя на странице регистрации (например, register.php) сайта mysite.com, то это будет выглядеть так:

http://mysite.com/register.php?fname=Иван&lname=Иванов

Следует обратить внимание, что браузеры устаревших версий могут некорректно воспринимать кириллицу и передача русских букв будет осуществляться неверно. Лучше в GET-запросах передавать исключительно служебную информацию в виде чисел и слов на латинском языке.

Недостатком GET-запросов является ограниченность передаваемых данных. На стороне сервера строка запроса ограничивается некоторым максимальным значением. Например, если максимальный размер запроса может составлять 1024 символа, то все что превышает это значение будет удалено и тогда часть передаваемой информации не будет обработана указанной страницей сайта. Вторым существенным ограничением является возможность передачи строго определенных наборов символов. Например, символы? и & уже зарезервированы и их передавать как значения параметров нельзя. Однако это правило можно обойти, если в строке запроса передавать не сам символ, а его кодовое значение. Для этого используется символ ‘%’, за которым следует код символа, например, так:

http://mysite.com/register.php?fname=%CC%DF%AD%1F%DS&lname=%DD

Здесь кодовые значения указаны в шестнадцатиричном виде с целью экономии длины запроса.

Несмотря на указанные недостатки, создание сайтов без GET-запросов было бы крайне затруднительно. Например, они незаменимы в случаях начальной инициализации страницы сайта для конкретного пользователя, когда в запросе указывается не только сайт и текущая страница, но и его id, как это сделано в социальной сети Вконтакте:

http://vk.com/profile.php?id=12345678

Также GET-запросы часто применяются для проверки корректности email-адреса при регистрации пользователя. В этом случае пользователю на указанный email приходит письмо со ссылкой активации и эта ссылка представляет собой GET-запрос.

POST -запросы

Для решения указанных недостатков GET-запросов были добавлены POST-запросы, позволяющие передавать большие объемы данных в бинарном виде, т.е. без искажений и изменений передаваемых данных. Такие запросы хорошо подходят для загрузки файлов и изображений на сервер. Например, когда пользователь загружает изображение в свой профиль социальной сети, то для этого используются POST-запросы. Более подробно об организации POST-запросов будет сказано ниже.

Если заметили ошибку, выделите фрагмент текста и нажмите Ctrl+Enter
ПОДЕЛИТЬСЯ: