grpc — отправка запроса JSON POST API REST в переполнении стека

Мне нужно сделать запрос POST, используя объект JSON в качестве тела. Оба эти метода дают мне ошибки HTTP 500 сервера. Что-то явно не так с моим кодом? Быть нежным…
Я пробовал несколько методов, включая

$checkfor = ("'serverId':'Server','featureId':'Feature','propertyId':'Property'");
$checkforJson = json_encode($checkfor);
$uri = "http://localhost:8080/v1/properties";
$response = \Httpful\Request::post($uri)
->method(Request::post)
->withoutStrictSsl()
->expectsJson()
->body($checkforJson)
->send();
pre($response);

Который использует ресурс HTTPful. И я попытался с помощью CURL

$service_url = "http://localhost:8080/v1/properties";

// Initialize the cURL
$ch = curl_init($service_url);

// Set service authentication

// Composing the HTTP headers
$body = array();
$body[] = '"serverId" : "Server"';
$body[] = '"featureId" : "Feature"';
$body[] = '"propertyId" : "Property"';
$body = json_encode($body);

$headers = array();
$headers[] = 'Accept: application/xml';
$headers[] = 'Content-Type: application/xml; charset=UTF-8';

// Set the cURL options
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_POSTFIELDS, $body);
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_HEADER, TRUE);
curl_setopt($ch, CURLINFO_HEADER_OUT, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);

curl_setopt($ch, CURLOPT_TIMEOUT, 15);

// Execute the cURL
$data = curl_exec($ch);

// Print the result
pre($data);

1

Решение

Ваш json_encode требует массив.

Это должно выглядеть так

<?php

$checkfor = ([
'serverId'=>'Server',
'featureId'=>'Feature',
'propertyId'=>'Property'
]);

$checkforJson = json_encode($checkfor);
var_dump($checkforJson); // this will now work

https://3v4l.org/RG5Zv

Для лучшего понимания прочитайте доктор

ОБНОВЛЕНИЕ Я также замечаю на сценарии curl, ваш массив необходимо исправить снова

 $body['serverId'] = 'Server';

и не JSON кодировать поля сообщения впоследствии, он принимает массив.

1

Другие решения

Ты пытался:

$body = array(
"serverId" => "Server",
"featureId" => "Feature",
"propertyId" => "Property",
);

$body = json_encode($body);

Может быть, так настроен ваш массив

1

У меня были подобные проблемы некоторое время назад.

Решение, которое работало для меня, было следующим:

$url = 'http://yourURL.com/api';
$data = array('field1' => 'value', 'field2' => 'value');
$options = array(
'http' => array(
'header'  => "Content-type: application/json\r\n",
'method'  => 'POST',
'content' => json_encode($data),
)
);

$context  = stream_context_create($options);
$result = file_get_contents( $url, false, $context );
$response = json_decode( $result );

Подобные ответы можно найти ВОТ

1
По вопросам рекламы [email protected]