"watermelon", "destination"=>"germany");$data = json_encode($data);// echo json_last_error(); //Retu" />

PHP: парсинг данных JSON "PUT", выдающий массив EMPTY?

php json api curl put

123 просмотра

2 ответа

8223 Репутация автора

Я делаю небольшой API в PHP. И у меня проблемы с PUTглаголом. Вот мои тестовые сценарии для PUT.

(Отправитель) submit.php:

$data = array("fruit"=>"watermelon", "destination"=>"germany");
$data = json_encode($data);

// echo json_last_error(); //Returns: 0 (JSON Data Integrity Check. So I supposed there is NO ERROR in JSON Object)

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://www.example.com/api.php");
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT");
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json','Content-Length: ' . strlen($data)));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$respond = curl_exec($ch);
curl_close($ch);
print_r($respond);

(Получатель) api.php:

$decoded_input = json_decode(file_get_contents("php://input"), true);
parse_str($decoded_input, $putdata);
echo json_encode( $putdata );

Выход

[]

Но ждать!

Но .... когда я НЕ использую тип данных JSON в представлении (комментарий ниже, 2 строки):

//$data = json_encode($data);
//curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json','Content-Length: ' . strlen($data)));

Затем я получил что-то вроде:

stdClass Object ( [------------------------------4f5f68d9cc92 Content-Disposition:_form-data;_name] => "fruit" watermalon ------------------------------4f5f68d9cc92 Content-Disposition: form-data; name="origin" germany ------------------------------4f5f68d9cc92-- )
  • Что происходит, когда я использую JSONтип данных в представлении, пожалуйста?
  • Что еще более важно, как отправить и проанализировать данные JSON через метод PUT?
Автор: 夏期劇場 Источник Размещён: 19.07.2016 03:52

Ответы (2)


0 плюса

23793 Репутация автора

Вы устанавливаете данные в строку JSON

$data = json_encode($data);

Затем попробуйте получить его, используя parse_str

parse_str( file_get_contents("php://input"), $putdata);

parse_strне могу разобрать JSON. Вам нужно json_decode:

// will be NULL if the decode fails
$putdata = json_decode(file_get_contents("php://input"),true);
if(is_null($putdata)) die(json_last_error());

Я также заметил некоторые проблемы с вашими CURLопциями. Конкретно вы смешиваете POSTи PUTнастройки. Удалить эту строку:

curl_setopt($ch, CURLOPT_POST, true);
Автор: BeetleJuice Размещён: 19.07.2016 04:03

0 плюса

0 Репутация автора

Решение

Удалить:

curl_setopt($ch, CURLOPT_POST, true);
Автор: user11856197 Размещён: 30.07.2019 07:49
Вопросы из категории :
32x32