Как сделать post запрос php
Перейти к содержимому

Как сделать post запрос php

  • автор:

POST-запрос через file_get_content()

Функция file_get_contents($filename) — читает содержимое файла в строку, если в $filename указать URL, то функция попытается получить содержимое веб-станицы GET-запросом.

echo file_get_contents('https://example.com');

Отправка POST-запроса

Чтобы отправить POST-запрос достаточно дополнительно отправить HTTP-заголовки с помощью функции stream_context_create(), в параметре $context функции file_get_contents() :

$post = array( 'name' => 'Alex', 'email' => 'mail@example.com' ); $headers = stream_context_create( array( 'http' => array( 'method' => 'POST', 'header' => 'Content-Type: application/x-www-form-urlencoded', 'content' => http_build_query($post), ) ) ); echo file_get_contents('https://example.com', false, $headers);

Отправка cookie

Куки передаются заголовком «Cookie», содержащий пары ключ=значение , разделенные « ; ».

$post = array( 'name' => 'Alex', 'email' => 'mail@example.com' ); $headers = stream_context_create( array( 'http' => array( 'method' => 'POST', 'header' => 'Content-Type: application/x-www-form-urlencoded' . PHP_EOL . 'Cookie: user=admin; pass=123456', 'content' => http_build_query($post), ) ) ); echo file_get_contents('https://example.com', false, $headers);

POST-запрос с авторизацией

Если запрашиваемая страница закрыта базовой HTTP-аутентификацией, то можно отправить логин и пароль заголовком « Authorization: Basic . ».

$auth = base64_encode('user:password'); $post = array( 'name' => 'Alex', 'email' => 'mail@example.com' ); $headers = stream_context_create( array( 'http' => array( 'method' => 'POST', 'header' => 'Content-Type: application/x-www-form-urlencoded' . PHP_EOL . 'Authorization: Basic ' . $auth, 'content' => http_build_query($post), ) ) ); echo file_get_contents('https://example.com', false, $headers);

Для протокола OAuth используются заголовки Authorization: OAuth ТОКЕН или Authorization: Bearer ТОКЕН .

Как отправить HTTP запрос методом POST на URL через PHP?

Tyranron

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

Но раз вопрос уже задан, то должен быть и ответ(ы).
Собственно, @OnYourLips дал ссылку на хороший фреймворк, но если нет смысла тащить в проект/скрипт целый фреймворк ради одного запроса, к примеру, то логичнее воспользоваться упомянутым CURL. В Вашем случае сценарий использования CURL будет выглядеть примерно следующим образом:

$myCurl = curl_init(); curl_setopt_array($myCurl, array( CURLOPT_URL => 'http://target.site.com/form.php', CURLOPT_RETURNTRANSFER => true, CURLOPT_POST => true, CURLOPT_POSTFIELDS => http_build_query(array(/*здесь массив параметров запроса*/)) )); $response = curl_exec($myCurl); curl_close($myCurl); echo "Ответ на Ваш запрос: ".$response;

HTTP-запрос методом POST.

Кроме метода GET, который мы рассмотрели в предыдущей заметке, существует еще один метод отправки запроса по протоколу HTTP – метод POST. Метод POST тоже очень часто используется на практике.

http метод post

Если, для того, чтобы обратиться к серверу методом GET, нам достаточно было набрать запрос в URL-адрес, то в методе POST все работает по другому принципу.

Для того, чтобы выполнить этот вид запроса, нам необходимо нажать на кнопку с атрибутом type=»submit», которая расположена на веб-странице. Обратите внимание, что эта кнопка расположена в элементе , у которого установлен атрибут method со значением post.

Рассмотрим этот HTML-код:

 
Введите текст:

метод post

Если пользователь введет в текстовое поле какой-либо текст и нажмет на кнопку «Отправить», то на сервер будет отправлена переменная text со значением того содержимого, которое ввел пользователь. Эта переменная будет отправлена методом POST.

Если в форме написать так:

То данные будут отправляться методом GET.

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

Еще одно отличие метода POST от GET, метод POST скрывает все передаваемые им переменные и их значения, в своём теле (Entity-Body). В случае с методом GET они хранились в строке запроса (Request-URI).

Вот пример запроса, выполненного методом POST:

POST / HTTP/1.0\r\n Host: www.site.ru\r\n Referer: http://www.site.ru/index.html\r\n Cookie: income=1\r\n Content-Type: application/x-www-form-urlencoded\r\n Content-Length: 35\r\n \r\n login=Dima&password=12345

Таким образом, передавая данные методом POST, их будет намного труднее перехватить злоумышленнику, т.к. они скрыты от непосредственного просмотра, поэтому метод передачи данных методом POST считается более безопасным способом.

Кроме того, методом POST можно передавать не только текст, но и мультимедиа данные (картинки, аудио, видео). Существует специальный параметр Content-Type, который определяет тот вид информации, который необходимо передать.

Ну и, наконец, чтобы на сервере получить данные, которые были переданы этим методом, используется переменная POST.

Вот пример обработки на языке PHP:

Все мои уроки по серверному программированию здесь.

Совет: отправка POST запроса через функцию file_get_contents

Горячий совет тем, кто для хочет отправлять POST запросы, используя функцию file_get_contents() .

Для отправки POST запроса через file_get_contents нужно всего-навсего правильно сформировать параметр $context .

Вот пример из документации Опции контекста HTTP:

$postdata = http_build_query( array( 'var1' => 'some content', 'var2' => 'doh' ) ); $opts = array('http' => array( 'method' => 'POST', 'header' => 'Content-type: application/x-www-form-urlencoded', 'content' => $postdata ) ); $context = stream_context_create($opts); $result = file_get_contents('http://example.com/submit.php', false, $context);

По сути нужно создать поток с правильно сформированными данными, и передать их как параметр в file_get_contents .

5 последних уроков рубрики «PHP»

Фильтрация данных с помощью zend-filter

Когда речь идёт о безопасности веб-сайта, то фраза «фильтруйте всё, экранируйте всё» всегда будет актуальна. Сегодня поговорим о фильтрации данных.

Контекстное экранирование с помощью zend-escaper

Обеспечение безопасности веб-сайта — это не только защита от SQL инъекций, но и протекция от межсайтового скриптинга (XSS), межсайтовой подделки запросов (CSRF) и от других видов атак. В частности, вам нужно очень осторожно подходить к формированию HTML, CSS и JavaScript кода.

Подключение Zend модулей к Expressive

Expressive 2 поддерживает возможность подключения других ZF компонент по специальной схеме. Не всем нравится данное решение. В этой статье мы расскажем как улучшили процесс подключение нескольких модулей.

Совет: отправка информации в Google Analytics через API

Предположим, что вам необходимо отправить какую-то информацию в Google Analytics из серверного скрипта. Как это сделать. Ответ в этой заметке.

Подборка PHP песочниц

Подборка из нескольких видов PHP песочниц. На некоторых вы в режиме online сможете потестить свой код, но есть так же решения, которые можно внедрить на свой сайт.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *