您在发件人/收件人周期的回复部分中收到错误。
虽然这很可能是在发件人(不发送一个适当的请求)的问题,也可以通过在接收 PHP脚本配置错误引起的。即使请求是正确的,接收方可能仍然没有HTTP_RAW_POST_DATA
可用。
请参见:http://www.php.net/manual/en/ini.core.php#ini.always-populate-raw-post-data
总是产生$ HTTP_RAW_POST_DATA包含有原始的POST数据。 否则,该变量仅填充数据的无法识别的MIME类型 。但是,访问原始POST 数据的首选方法是php://输入。 $ HTTP_RAW_POST_DATA不适用于 enctype =“multipart/form-data”。
所以要检查的第一件事就是$HTTP_RAW_POST_DATA
是否确实填充,从网页上面要求之一:
- 在.ini变量
always_populate_raw_post_data
为True,
- 或POST与发送一个
Content-Type
POST处理程序无法识别(也许人们可以使用“text/raw”)
此时,发送数据的正确方法是
curl_setopt($handle, CURLOPT_POSTFIELDS, urlencode('Raw POST data'));
但是请注意,接收这些数据将不依赖于$HTTP_RAW_POST_DATA
所有,但读取虚拟文件php://input
内容的推荐方式。
php://输入是一个只读流,允许您从请求主体读取原始数据 。在POST请求的情况下,最好 使用php://输入,而不是$HTTP_RAW_POST_DATA
,因为它不依赖于特殊的php.ini指令,因此不会使用 。而且,对于默认情况下未填充 $ HTTP_RAW_POST_DATA的情况,这是潜在的 较少的内存密集型替代方式,以激活 always_populate_raw_post_data。
我相当肯定的接收器工作正常(使用Live HTTP头添加为Firefox)的罚款,手动发送POST数据。 我知道php://输入以及它如何更好,但是,在这种情况下,我需要$ HTTP_RAW_POST_DATA的解决方案。 谢谢你的回复! – user1488335
那么,在这种情况下,您可以在PHP.INI中设置always-populate-raw-post-data设置;或者你可以发送一个“无法识别的”(无论*表示*)“MIME类型”来强制使用'$ HTTP_RAW_POST_DATA'。更新答案... – LSerni
这个答案似乎与原始问题无关,这个问题实际上是关于使用PHP中的libcurl执行HTTP请求,而不是访问发送给运行在Web服务器中的PHP脚本的POST数据。 – Shadocko