使用 file_get_contents 发出 POST application/json 请求

问题描述 投票:0回答:2

我用 PHP 编写了一段代码。当我运行命令时,代码可以正常工作:

$payload = file_get_contents ('request.json');

但是,我需要为 request.json 传递的参数创建动态内容

我创建了一个例程,生成一个与 request.json 文件中内容完全相同的字符串。但是,当我将此内容传递给 $payload 时,我的功能不起作用。

$options = array (
  'http' => array (
    'header' => "Content-type: application / json",
    'method' => 'POST',
    'content' => $reqjson,
  )
);

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

这是为什么呢? “file_get_contents”函数返回的类型不是普通字符串吗?怎么解决?

php json
2个回答
1
投票

首先,每一行标题必须以“结尾 ”。请将其附加到“Content-Type”行。其次,如果函数 file_get_contents() 返回

false
,则意味着请求以某种方式失败。您应该检查 $http_response_header 以获取更多信息:

$options = array(
  'http' => array(
    'header' => "Content-type: application/json\r\n",
    'method' => 'POST',
    'content' => $reqjson,
  ),
);

$context = stream_context_create($options);
if (($result = file_get_contents($url, false, $context)) === false) {
  var_dump($http_response_header);
}

如果响应头 (

$http_response_header
) 以
HTTP/1.0 400 Bad Request
开头,则意味着服务器认为您的请求格式错误。然后,

  1. 如果您有权访问所请求的服务器,请尝试查找相关日志文件以获取更多信息。
  2. 如果您有所请求的服务器/服务的文档,请仔细检查接受的请求格式。
  3. 请求格式错误通常可能是:
    • “appliation/json”不是可接受的请求格式;或
    • $reqjson
      的内容格式错误(例如,它应该是JSON文本,而不是PHP数组)。
  4. 如果您正在使用第 3 方服务,但仍然无法弄清楚为什么它没有给您预期的结果,请向服务提供商寻求帮助。

0
投票

谢谢杨考拉。

正如我所说,问题是我尝试在字符串中组装与 request.json 文件中完全相同的内容。但是,当我使用 file_get_contents 函数获取 json 文件的内容时,它起作用了。当直接在字符串变量中时,就会出现错误:

数组(8){[0] =>字符串(24)“HTTP / 1.0 400错误请求”[1] =>字符串(79)“x-cloud-trace-context:db4d34cce75495db89a04731bb718b49 / 1272894976542815412; o = 0”[ 2] => 字符串 (12)“变化:起源”[3] => 字符串(45)“内容类型:应用程序/json;字符集 = utf-8”[4] => 字符串(23)“缓存控制:无缓存“[5] => string (19)”内容长度:229“[6] => string (35)”日期:2020年12月8日星期二21:01:45 GMT“[7] =>字符串 (15)“通过:1.1 谷歌”}

布尔(假)

我相信这与此类错误有关: “$ reqjson 的内容格式错误(例如,它应该是 JSON 文本,而不是 PHP 数组)。”

但是字符串是相同的。

© www.soinside.com 2019 - 2024. All rights reserved.