您在发送者/接收者周期的响应部分收到错误。
虽然这很可能是发送方的问题(它没有发送正确的请求),但也可能是由接收PHP 脚本中的错误配置引起的。也就是说,即使请求是正确的,接收者可能仍然没有HTTP_RAW_POST_DATA
可用的。
见:http ://www.php.net/manual/en/ini.core.php#ini.always-populate-raw-post-data
始终填充包含原始 POST 数据的 $HTTP_RAW_POST_DATA。否则,该变量仅填充有无法识别的 MIME 类型的数据。但是,访问原始 POST 数据的首选方法是 php://input。$HTTP_RAW_POST_DATA 不适用于 enctype="multipart/form-data"。
因此,首先要检查的是是否$HTTP_RAW_POST_DATA
确实已填充,从上面的页面中需要:
- .ini 变量
always_populate_raw_post_data
为真,
- 或者 POST 发送
Content-Type
的 POST 处理程序无法识别(也许可以使用“text/raw”)
此时,发送数据的正确方法是
curl_setopt($handle, CURLOPT_POSTFIELDS, urlencode('Raw POST data'));
但是,请注意,接收这些数据的推荐方式是完全不依赖$HTTP_RAW_POST_DATA
,而是读取虚拟文件的内容php://input
。
php://input 是一个只读流,允许您从请求正文中读取原始数据。在 POST 请求的情况下,最好使用 php://input 而不是$HTTP_RAW_POST_DATA
因为它不依赖于特殊的 php.ini 指令。此外,对于那些默认情况下不填充 $HTTP_RAW_POST_DATA 的情况,与激活 always_populate_raw_post_data 相比,它可能是一种内存密集度较低的替代方案。