Как принять POST json запрос на php?
Всем привет! Возник вопрос, с которым мучаюсь уже несколько дней.
Имеется сервис, который отправляет на указанную страницу POST запрос в формате json, мне же нужно его поймать на своей странице и добавить элементы в базу.
В документации прописано:
Пример запроса:
POST /page.php HTTP/1.1 Host: host.host Authorization: Bearer XXXXX Content-Type: application/json Accept: application/json Cache-Control: no-cache < "date": "2017-04-25T01:29:20.4520214+00:00", "stocks": [ < "nnt": 111173, "qnt": 5, "man": "man", "prcRet": 117.99, "name": "name", "dtComing": "2017-08-09T00:00:00 + 07:00" >] >
Пример успешного ответа:
HTTP/1.1 202 Accepted []
Пытаюсь поймать через php
header('content-type: application/json'); $v = json_decode(file_get_contents('php://input')); echo json_encode($v);
Но на странице получаю NULL, хотя сервис говорит, что все гуд. Подскажите пожалуйста, как поймать этот json?
- Вопрос задан более трёх лет назад
- 11042 просмотра
10 комментариев
Средний 10 комментариев
Как отправить, обработать и принять POST запрос на PHP: основы работы с PHP

POST запрос является одним из самых распространенных методов HTTP-запроса, который используется для отправки данных с веб-страницы на сервер. В этой статье мы расскажем вам, как отправить, обработать и принять POST запрос на PHP.
Содержание
- Отправка POST запроса на PHP
- Обработка POST запроса на PHP
- Принятие POST запроса на PHP
- Возможные ошибки
- Заключение
Отправка POST запроса на PHP
Отправка POST запроса на PHP может быть выполнена с помощью функции curl_setopt() . Вот пример кода:
// URL, на который нужно отправить POST запрос
$url = 'http://example.com/post.php';
// Данные, которые нужно отправить
$data = array('name' => 'John', 'email' => 'john@example.com');
// Создание cURL запроса
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
// Выполнение запроса и получение ответа
$response = curl_exec($ch);
// Закрытие cURL запроса
curl_close($ch);
?>
В этом примере мы используем функцию curl_setopt() , чтобы установить параметры для нашего запроса. CURLOPT_RETURNTRANSFER указывает на то, что мы хотим получить ответ от сервера в виде строки, а CURLOPT_POST указывает на то, что мы отправляем POST запрос. Массив $data содержит данные, которые мы хотим отправить на сервер.
Обработка POST запроса на PHP
После того, как POST запрос был отправлен на сервер, мы можем обработать данные, которые были отправлены. Данные из POST запроса могут быть получены с помощью массива $_POST . Вот пример кода:
if ($_SERVER['REQUEST_METHOD'] == 'POST') $name = $_POST['name'];
$email = $_POST['email'];
// Обработка данных
echo "Данные успешно обработаны!";
>
?>
В этом примере мы используем условный оператор if для проверки того, что метод запроса является POST методом. Затем мы получаем данные из массива $_POST и обрабатываем их по своему усмотрению. В конце мы выводим сообщение о том, что данные были успешно обработаны.
Принятие POST запроса на PHP
Принятие POST запроса на PHP может быть выполнено на стороне сервера. Вот пример кода, который демонстрирует, как принять POST запрос на PHP:
// Получение данных из POST запроса
$name = $_POST['name'];
$email = $_POST['email'];
// Обработка данных
// Отправка ответа
echo "Данные успешно обработаны!";
?>
В этом примере мы получаем данные из массива $_POST и обрабатываем их по своему усмотрению. Затем мы отправляем ответ об успешной обработке данных с помощью функции echo . Важно убедиться, что ответ от сервера имеет корректный HTTP-статус и заголовки.
Возможные ошибки
При работе с POST запросами на PHP могут возникнуть различные ошибки, связанные с некорректными данными, ошибками на стороне сервера или проблемами с соединением. Ниже мы рассмотрим некоторые из наиболее распространенных ошибок при работе с POST запросами на PHP:
Ошибка при отправке запроса
Эта ошибка может быть вызвана некорректными параметрами запроса, проблемами с соединением или недоступностью сервера. Если запрос не может быть отправлен, необходимо проверить параметры запроса и убедиться, что сервер доступен и работает корректно.
Ошибка при обработке данных
Эта ошибка может быть вызвана некорректными или неполными данными, ошибками при валидации или проблемами с базой данных. Если данные не могут быть обработаны, необходимо проверить их на корректность и убедиться, что используемые методы валидации работают корректно.
Ошибка при получении данных
Эта ошибка может быть вызвана некорректными параметрами запроса, проблемами с соединением или недоступностью сервера. Если данные не могут быть получены, необходимо проверить параметры запроса и убедиться, что сервер доступен и работает корректно.
Ошибка при отправке ответа
Эта ошибка может быть вызвана некорректными параметрами ответа, проблемами с соединением или недоступностью сервера. Если ответ не может быть отправлен, необходимо проверить параметры ответа и убедиться, что сервер доступен и работает корректно.
Ошибка безопасности
Эта ошибка может быть вызвана некорректной обработкой пользовательских данных, недостаточной проверкой входных данных или проблемами с защитой от взлома. Если возникают проблемы с безопасностью, необходимо обратиться к специалистам по безопасности, чтобы исправить эти проблемы.
Это только некоторые из возможных ошибок, которые могут возникнуть при работе с POST запросами на PHP. При работе с POST запросами необходимо быть внимательными и учитывать все возможные ошибки, чтобы обеспечить безопасность и корректность работы приложения.
Заключение
POST запросы являются одним из самых распространенных методов HTTP-запроса, который используется для отправки данных с веб-страницы на сервер. В этой статье мы рассмотрели, как отправлять, обрабатывать и принимать POST запрос на PHP. При работе с POST запросами важно учитывать безопасность и проверять входные данные на наличие ошибок и некорректных значений. Надеемся, что эта статья была полезной для вас и поможет вам при работе с POST запросами на PHP.
cURL — это просто

cURL — это технология, которая предназначена для передачи/получения данных посредстов URL. Технология cURL поддерживает такие распространенные протоколы, как HTTP, FTP, HTTPs и другие. Изначально cURL был инструментом командной строки, однако разработчики PHP не поленились и создали библиотеку в PHP, чем облегчили жизнь миллионам программистам. Давайте попробуем вместе разобраться с технологией cURL на примерах. Советую читать всё и по порядку.
Я знаю достаточно много примеров, где для получения сторонних web-страниц (парсеры) использовались совершенно другие способы, отличные от cURL. Например:
- file_get_contents(«https://intop24.ru»);
- file(«https://intop24.ru»);
- readfile(«https://intop24.ru»);
Почему разработчики использовали их и что в них не так? А потому, что не знали, либо не хотели знать, что такое cURL. А не так в них то, что функционал ограничен: получили страницу и все на этом, в то время, как cURL может отправить форму на странице, получить ответ, обработать ошибку, начать всё заново и т.д.
Принцип работы cURL
При использовании cURL-запросов существует 4 основных шага, которые должны (обязаны) быть в вашем скрипте, это:
- Инициализация
- Назначение параметров
- Выполнение и выборка результата
- Освобождение памяти
Без любого из этих шагов ваш скрипт обречен на неудачу. Итак, основные шаги:
// 1. инициализация $ch = curl_init(); // 2. указываем параметры, включая url curl_setopt($ch, CURLOPT_URL, "https://intop24.ru"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HEADER, 0); // 3. получаем HTML в качестве результата $output = curl_exec($ch); // 4. закрываем соединение curl_close($ch);
Думаю что все шаги вам понятны за исключением второго: «Указания параметров». На этом шаге мы остановимся более подробно, т.к. именно он задает все необходимые настройки / параметры / методы.
Ошибки в ходе работы скрипта
Дабы не нагружать сервер дальнейшими вычеслениями, всегда проверяйте результат выполнения функции curl_exec:
$output = curl_exec($ch); // А вдруг ошибочка? if ($output === FALSE) < // Тут-то мы о ней и скажем echo 'cURL Error: ' . curl_error($ch); return; >
Отмечу, что знак сравнения здесь ‘===’, а не ‘==’, т.е. сравнивается именно на наличие логического FALSE, а не пустой строки или строки ‘false’.
Результат запроса
Ну а после того, как CURL-запрос был выполнен, неплохо бы было знать, что он вернул:
// Выполняем запрос curl_exec($ch); // Получаем информацию о запросе $info = curl_getinfo($ch); // Выводим какую-то инфомрацию echo 'Запрос выполнился за ' . $info['total_time'] . ' сек. к URL: ' . $info['url'];
А вот какие еще даные мы можем получить:
| Индекс массива | Значение | Индекс массива | Значение |
|---|---|---|---|
| url | string(17) «https://intop24.ru» | content_type | string(24) «text/html; charset=utf-8» |
| http_code | int(200) | header_size | int(218) |
| request_size | int(49) | filetime | int(-1) |
| ssl_verify_result | int(0) | redirect_count | int(0) |
| total_time | float(0.009419) | namelookup_time | float(1.3E-5) |
| connect_time | float(1.3E-5) | pretransfer_time | float(1.4E-5) |
| size_upload | float(0) | size_download | float(46523) |
| speed_download | float(4939271) | speed_upload | float(0) |
| download_content_length | float(-1) | upload_content_length | float(0) |
| starttransfer_time | float(0.009374) | redirect_time | float(0) |
| certinfo | array(0) | redirect_url | string(0) «» |
POST запрос с помощью CURL
Давайте напишем наш первый скрипт, который отправит данные методом POST на какую-нибудь страницу и посмотрит, что отобразилось на этой странице.
Сначала нам нужен файл, который бы принял наши данные и что-то вывел на страницу. Я расположил его по адресу https://intop24.ru/demo/curl/post.php. В нем содержится следующий код:
if (isset($_POST) && sizeof($_POST) > 0)
Теперь попробуем передать туда какие-то данные:
$url = "https://intop24.ru/demo/curl/post.php"; $post_data = array ( "foo" => "bar", "query" => "Nettuts", "action" => "Submit" ); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // Указываем, что у нас POST запрос curl_setopt($ch, CURLOPT_POST, 1); // Добавляем переменные curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data); $output = curl_exec($ch); curl_close($ch); echo $output;
Результат можно посмотреть здесь: curl_post.php
Отправка файла с помощью CURL
Смысл здесь абсолютно такой же, как и в запросе POST.
Файл, который примет данные: https://intop24.ru/demo/curl/upload_file.php.
print_r($_FILES); print_r($_POST);
Теперь попробуем передать туда какие-то данные:
$upload = 'test_file.jpg'; $postdata = array( 'name' => 'German', 'email' => 'krutovgerman2007@ya.ru', 'message' => 'Какое-то сообщение от пользователя German', 'upload' => "@".$upload ); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, 'https://intop24.ru/demo/curl/upload_file.php'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $postdata); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30); $output = curl_exec($ch); if ($output === FALSE) < // Тут-то мы о ней и скажем echo "cURL Error: " . curl_error($ch); return; >print_r($output); curl_close($ch);
Результат можно посмотреть здесь: curl_post_file.php
Загрузка файла — это тот же самый POST-запрос, однако перед путем к файлу стоит знак «@», что и обозначает, что нужно это передать не как $_POST, а как $_FILES.
HTTP аутентификация с помощью CURL
Довольно полезная штука.
$url = "https://www.site.com/"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // Указываем имя и пароль curl_setopt($ch, CURLOPT_USERPWD, "krutovgerman2007@yandex.ru:mypassword"); // Если перенаправление разрешено curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); // То сохраним наши данные в cURL curl_setopt($ch, CURLOPT_UNRESTRICTED_AUTH, 1); $output = curl_exec($ch); curl_close($ch);
Запрос сURL через прокси
$ch = curl_init(); curl_setopt($ch, CURLOPT_URL,'https://www.example.com'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // Указываем адрес curl_setopt($ch, CURLOPT_PROXY, '11.11.11.11:8080'); // Если необходимо предоставить имя пользователя и пароль curl_setopt($ch, CURLOPT_PROXYUSERPWD,'user:pass'); $output = curl_exec($ch); curl_close ($ch);
Понравилась или помогла статья? Самое лучшее, что ты можешь сделать — это поделиться ею в любой из своих соцсетей (даже если ты поделишься в твиттере или google+, которыми ты не пользуешься — это очень поможет развитию моего блога). Спасибо! А если ты еще и оставишь любой комментарий снизу в обсуждениях, то это будет двойное СПАСИБО!
Как отправтиь POST-запрос в PHP?
Самый простой способ сделать POST-запрос это воспользоваться библиотекой cURL.
Простой пример запроса:
$ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "http://www.example.com/api/resource"); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, "name=value"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $output = curl_exec($ch); curl_close($ch); echo $output; ?>
Здесь Как работает cURL в PHP? можно посмотреть как делать запросы в cURL-е.
