微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用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.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐