У меня есть этот PHP-код, и он работает, но содержимое request.json
публикуется как строка, инкапсулирующая содержимое файла.PHP, Как загрузить файл в формате json?
Я хочу, чтобы на нем было размещено содержимое файла напрямую (текстовый файл, содержащий json). Как мне изменить этот код, чтобы $payload
не был повторно инкапсулирован как строка перед отправкой?
Я предполагаю, что моя строка 'content' => json_encode($payload)
нуждается в изменении, но не знаю PHP, чтобы знать, как его изменить.
$url = 'http://api.phantomjscloud.com/examples/helpers/requestdata';
$payload = file_get_contents ('request.json');
$options = array(
'http' => array(
'header' => "Content-type: application/json\r\n",
'method' => 'POST',
'content' => json_encode($payload)
)
);
$context = stream_context_create($options);
$result = file_get_contents($url, false, $context);
if ($result === FALSE) { /* Handle error */ }
var_dump($result);
PS: Я не хочу использовать сторонние библиотеки, такие как curl или zend. Просто Php!
EDIT 1: уточнение для тех, кто жалуется JSON это просто текст.
EDIT 2:
при попытке либо 'content' => json_decode($payload)
Я получаю ошибку:
Warning: file_get_contents(http://api.phantomjscloud.com/examples/helpers/requestdata): failed to open stream: HTTP request failed! HTTP/1.0 411 Length Required
in request.php on line 15
bool(false)
мои содержание request.json просты, если это имеет значение:
{
"hi":"world"
}
EDIT 3:
@Nasreddine ответ является правильным. my request.json
файл на самом деле не был прав json (я не инкапсулировал ключи в двойных кавычках), поэтому я получал ошибку http-response для плохой json.
спасибо, мой плохой :(
Ваш вопрос не имеет никакого смысла. [Нет такого объекта, как объект JSON] (http://benalman.com/news/2010/03/theres-no-such-thing-as-a-json/). JSON представляет собой текстовый формат данных. HTTP - это протокол для передачи текста. Преобразование объекта в строку JSON, а затем включение его в тело запроса - это то, как вы делаете запрос JSON с HTTP. – Quentin
Извините за путаницу, проблема в том, что строка из request.json снова экранируется как json, поэтому она отправляет строку содержимого файла, а не содержимое файла напрямую – JasonS
Вам нужно отправить заголовок 'Content-Length' в соответствии с кодом ответа HTTP. –