如何使用cURL发送原始POST数据? (PHP)

我正在尝试使用$HTTP_RAW_POST_DATA将原始POST数据发送到页面,但我的尝试失败并且给出了未定义的索引通知.

我尝试过以下方法

curl_setopt($handle,CURLOPT_POSTFIELDS,'Raw POST data');   // Doesn't seem to work at all.
curl_setopt($handle,array('Raw POST data'));   // 0 => Raw POST data

我做了一些研究,有些人建议在请求中发送一个标题(Content-Type:text / plain),这似乎没有任何影响.

如果有人能够为这个问题提供解决方案,我将非常感激.谢谢!

解决方法

您的发送方/接收方周期的响应部分出现错误.

虽然这很可能是发送方的问题(它没有发送正确的请求),但也可能是由接收PHP脚本中的配置错误引起的.也就是说,即使请求是正确的,接收器也可能没有HTTP_RAW_POST_DATA可用.

见:http://www.php.net/manual/en/ini.core.php#ini.always-populate-raw-post-data

Always populate the $HTTP_RAW_POST_DATA containing the raw POST data.
Otherwise,the variable is populated only with unrecognized MIME type
of the data. However,the preferred method for accessing the raw POST
data is PHP://input. $HTTP_RAW_POST_DATA is not available with
enctype=”multipart/form-data”.

因此,首先要检查的是是否确实填充了$HTTP_RAW_POST_DATA,从上面的页面要求:

> .ini变量always_populate_raw_post_data为True,
>或POST与POST处理程序无法识别的Content-Type一起发送(也许可以使用“text / raw”)

此时,正确的发送数据的方式将是

curl_setopt($handle,urlencode('Raw POST data'));

但是,请注意,接收这些数据的推荐方法根本不是依赖于$HTTP_RAW_POST_DATA,而是要读取虚拟文件PHP:// input的内容.

PHP://input is a read-only stream that allows you to read raw data
from the request body. In the case of POST requests,it is preferable
to use PHP://input instead of $HTTP_RAW_POST_DATA as it does not depend on special PHP.ini directives. Moreover,for those cases where $HTTP_RAW_POST_DATA is not populated by default,it is a potentially less memory intensive alternative to activating always_populate_raw_post_data.

相关文章

在Linux系统中,设置ARP防火墙可以通过多种方法实现,包括使...
在Linux环境下,使用Jack2进行编译时,可以采取以下策略来提...
`getid`命令在Linux系统中用于获取当前进程的有效用户ID(EU...
在Linux环境下,codesign工具用于对代码进行签名,以确保其完...
Linux中的`tr`命令,其英文全称是“transform”,即转换的意...
Linux中的ARP防火墙是一种用于防止ARP欺骗攻击的安全措施,它...