在PHP中从JSON POST读取HTTP请求体时出现问题

21 浏览
0 Comments

在PHP中从JSON POST读取HTTP请求体时出现问题

我正在编写一个脚本,将其注册为webhook的端点。我知道它已经成功注册,因为我将每个请求的头部写入了我的服务器日志。以下是一个示例:\nContent-Type: text/xml; charset=UTF-8\nUser-Agent: Jakarta Commons-HttpClient/3.1\nHost: =={obfuscated}== \nContent-Length: 1918\n\n我已经注册的API正在向我的脚本POST一个JSON对象,我想使用PHP解析该对象。从请求头部可以看出,有一个很大的JSON对象等待解析。看起来很简单,但实际并非如此。\n起初,我尝试使用$_POST[\'json\']$_POST,但由于数据不是一个数组,我并不确定如何像那样访问它。\n我尝试使用file_get_contents(\'php://input\')fopen(\'php://input\', \'r\'),有时还加上json_decode(),但都没有成功。我不能使用http_get_request_body(),因为我所在的服务器没有安装PECL,而这超出了我的控制范围。\n还有其他与我POST的JSON对象进行交互的方法吗?谢谢!

0
0 Comments

问题:在PHP中读取JSON POST请求的HTTP请求体的问题

原因:在PHP中,要读取JSON POST请求的HTTP请求体,可以使用file_get_contents('php://input')函数。但是有些情况下,这种方法可能无效。解决方法是将数据以FormData的形式发送,并使用$_POST来读取数据。

解决方法:

1. 将数据以FormData的形式发送。可以使用以下代码:

var fd = new FormData();
fd.append('key', 'value');
return axios.post('url', fd);

这样,数据将以FormData的形式发送到服务器端。

2. 在服务器端使用$_POST来读取数据。使用以下代码:

$data = $_POST['key'];

这样,就可以通过$_POST来获取发送的数据。

通过以上两个步骤,就可以解决在PHP中读取JSON POST请求的HTTP请求体的问题。

0
0 Comments

问题:从JSON POST中读取HTTP请求正文的问题

原因:由于PHP的请求体是流的性质,当使用"application/x-www-form-urlencoded"或"multipart/form-data"的Content-Type头部发送请求体时,$_POST只会填充值。你只能在$_POST中获取数据或者输入流中获取数据,不能同时获取。

解决方法:

$inputJSON = file_get_contents('php://input');
$input = json_decode($inputJSON, TRUE); //将JSON转换为数组

其中,json_decode的第二个参数将对象作为数组返回。

这种方法对我也有效。真不敢相信PHP无法识别JSON数据。我明白它毕竟是原始数据类型,但还是...

以上是解决问题的方法。

0