Intereting Posts
Поместите изображение в центр другого изображения, используя PHP GD Назначить переменную в условии, если true Ошибка: Предупреждение: strpos () : смещение не содержится в строке – не удается найти решение PHP: вставить текст до разделителя нужна кнопка, вызывающая функцию php Сочетание двух разных фильтров в одном Query – Elastica Если таблица mysql db не содержит строку с определенным идентификатором, добавьте данные в таблицу страшный «Warning: imagecreatefromjpeg (): '/ tmp / filename' не является допустимым файлом JPEG в /phpfile.php в строке xxx" Как получить дату с номера недели и числа дней и года? Как хранить строку / столбец данных mysql в массиве PHP: загрузка нескольких фотографий с использованием <input type = 'file'> с тем же именем Отображение меню WordPress с подменю и миниатюрами Получение данных с сайта, требующего данных POST? Данные POST на нескольких страницах Любой способ получить все строки таблицы, где внешний ключ совпадает с первичным ключом, используя только модели, а не напрямую обращаться к базе данных?

Данные POST JSON через CURL и захват

Я пытаюсь передать данные json в качестве параметра для cURL POST. Тем не менее, я застрял в том, чтобы схватить его и сохранить его на db.

cURL-файл:

$data = array("name" => "Hagrid", "age" => "36"); $data_string = json_encode($data); $url = 'http://localhost/project/test_curl'; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HTTPHEADER, array( 'Content-Type: application/json') ); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string); $result = curl_exec($ch); //based on http://www.lornajane.net/posts/2011/posting-json-data-with-php-curl 

Файл test_curl:

  $order_info = $_POST; // this seems to not returning anything //SAVE TO DB... saving empty... 

Что я упустил? Weew ….

Related of "Данные POST JSON через CURL и захват"

Вы отправляете данные как сырые JSON в теле, они не будут заполнять переменную $_POST .

Вам нужно сделать одну из двух вещей:

  1. Вы можете изменить тип содержимого на тот, который будет заполнять массив $_POST
  2. Вы можете прочитать данные исходного тела.

Я бы рекомендовал вариант 2, если у вас есть контроль над обоими концами связи, так как он будет поддерживать размер тела запроса до минимума и сэкономить пропускную способность с течением времени. ( Редактирование: я не особо подчеркивал здесь, что объем пропускной способности, который он будет сохранять, ничтожно мал, только несколько байтов на запрос, это будет только актуальной проблемой, это очень высокая среда трафика. Однако я по-прежнему рекомендую вариант два, потому что это самый чистый путь )

В файле test_curl сделайте следующее:

 $fp = fopen('php://input', 'r'); $rawData = stream_get_contents($fp); $postedJson = json_decode($rawData); var_dump($postedJson); 

Если вы хотите заполнить переменную $_POST , вам нужно будет изменить способ отправки данных на сервер:

 $data = array ( 'name' => 'Hagrid', 'age' => '36' ); $bodyData = array ( 'json' => json_encode($data) ); $bodyStr = http_build_query($bodyData); $url = 'http://localhost/project/test_curl'; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HTTPHEADER, array( 'Content-Type: application/x-www-form-urlencoded', 'Content-Length: '.strlen($bodyStr) )); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $bodyStr); $result = curl_exec($ch); 

Необработанный, незакодированный JSON теперь будет доступен в $_POST['json'] .

Используйте следующую функцию php для отправки данных с помощью функции php curl в формате x-www-form-urlencoded.

 <?php $bodyData = http_build_query($data); //for x-www-form-urlencoded ?>