【问题标题】:PHP, How to POST a file content as json?PHP,如何将文件内容发布为 json?
【发布时间】:2016-05-22 18:57:30
【问题描述】:

我有这个 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 等 3rd 方库。只是 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(我没有将密钥封装在双引号中),所以我收到了一个 http-response 错误,因为发布了错误的 json。

谢谢你,我的错:(

【问题讨论】:

  • 你的问题没有任何意义。 There is no such thing as a JSON object。 JSON 是一种基于文本的数据格式。 HTTP 是一种用于传输文本的协议。将对象转换为 JSON 字符串,然后将其包含在请求正文中就是使用 HTTP 发出 JSON 请求的方式。
  • 很抱歉造成混淆,问题是request.json中的字符串再次被转义为json,所以它发送的是文件内容的字符串,而不是直接发送文件内容
  • 您需要根据HTTP响应码发送Content-Length标头。

标签: php json post


【解决方案1】:

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

'content' => json_encode( $payload )

使用这个:

'content' => $payload

【讨论】:

  • @JasonS 很高兴我能提供帮助。快乐编码:)
【解决方案2】:

试试这个:

'content' => $payload

最终是这样的:

'content' => json_decode( $payload )

【讨论】:

  • 不幸的是,这不起作用。我认为如果我的文件被封装在一个字符串中。解决方案是纳斯雷丁的。谢谢
  • 嗯....我也说了纳斯雷丁'content' => $payload。我不明白为什么您在我的回答中看不到这一点……没关系……
猜你喜欢
  • 2021-07-24
  • 2018-05-01
  • 2016-08-02
  • 2017-07-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-08
  • 1970-01-01
相关资源
最近更新 更多