Я пытаюсь передать данные 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 ….
Вы отправляете данные как сырые JSON в теле, они не будут заполнять переменную $_POST
.
Вам нужно сделать одну из двух вещей:
$_POST
Я бы рекомендовал вариант 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 ?>