我用 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”函数返回的类型不是普通字符串吗?怎么解决?
首先,每一行标题必须以“结尾 ”。请将其附加到“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
开头,则意味着服务器认为您的请求格式错误。然后,
$reqjson
的内容格式错误(例如,它应该是JSON文本,而不是PHP数组)。谢谢杨考拉。
正如我所说,问题是我尝试在字符串中组装与 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 数组)。”
但是字符串是相同的。