我有这个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响应错误。
答案 0 :(得分:3)
您将已经json的内容重新编码为json文本。所以不要这样:
'content' => json_encode( $payload )
使用此:
'content' => $payload
答案 1 :(得分:1)
试试这个:
'content' => $payload
最终:
'content' => json_decode( $payload )