PHP,如何将文件内容作为json发布?

时间:2016-05-22 18:57:31

标签: php json post

我有这个PHP代码,它可以工作,但request.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这样的第三方库。 Just Php!

编辑1 :对于那些抱怨json的澄清只是文字。

编辑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"
}

编辑3

@Nasreddine回答是对的。 我的request.json文件实际上并不是正确的json(我没有用双引号封装密钥)所以我收到了json发布的http响应错误。

谢谢你,我的坏人:(

2 个答案:

答案 0 :(得分:3)

您将已经json的内容重新编码为json文本。所以不要这样:

'content' => json_encode( $payload )

使用此:

'content' => $payload

答案 1 :(得分:1)

试试这个:

'content' => $payload

最终:

'content' => json_decode( $payload )