我正在尝试使用 $ HTTP_RAW_POST_DATA 将原始POST数据发送到某个页面,但我的尝试失败并且给出了未定义的索引通知。
我尝试过以下方法:
curl_setopt($handle, CURLOPT_POSTFIELDS, 'Raw POST data'); // Doesn't seem to work at all.
curl_setopt($handle, CURLOPT_POSTFIELDS, array('Raw POST data')); // 0 => Raw POST data
我做了一些研究,有些人建议在请求中发送标题( Content-Type:text / plain ),这似乎不会影响任何内容
如果有人能够为此问题提供解决方案,我将非常感激。谢谢!
答案 0 :(得分:4)
发件人/收件人周期的响应部分出现错误。
虽然这很可能是发件人(它没有发送正确的请求)的问题,但也可能是由于接收 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://输入。 $ HTTP_RAW_POST_DATA不可用 ENCTYPE = “多部分/格式数据”。
首先要检查的是$HTTP_RAW_POST_DATA
是否确实已填充,从上面的页面中需要:
always_populate_raw_post_data
为True,Content-Type
一起发送(也许可以使用“text / raw”)此时,正确的发送数据的方式是
curl_setopt($handle, CURLOPT_POSTFIELDS, urlencode('Raw POST data'));
但是,请注意接收这些数据的推荐方式根本不依赖于$HTTP_RAW_POST_DATA
,而是要读取虚拟文件php://input
的内容。
php:// input是一个只读流,允许您读取原始数据 来自请求机构。在POST请求的情况下,它是可取的 使用php://输入而不是
$HTTP_RAW_POST_DATA
,因为它没有 依赖于特殊的php.ini指令。而且,对于那些情况 默认情况下不会填充$ HTTP_RAW_POST_DATA,它是潜在的 激活的内存密集程度较低 always_populate_raw_post_data。
答案 1 :(得分:1)
由于一些奇怪的原因,前面提到的标题似乎解决了它,以前它不起作用,我不确定为什么它现在有效。 无论如何,对于那些不知道这是代码的人:
curl_setopt($handle, CURLOPT_HTTPHEADER, array('Content-Type: text/plain'));