繁体   English   中英

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

[英]How to send raw POST data with cURL? (PHP)

我正在尝试使用$ 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 ),这似乎没有任何影响。

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

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

虽然这很可能是发送方的问题(它没有发送正确的请求),但也可能是由接收 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。 enctype =“multipart / form-data”不提供$ HTTP_RAW_POST_DATA。

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

  1. .ini变量always_populate_raw_post_data为True,
  2. 或POST与POST处理程序无法识别的Content-Type一起发送(也许可以使用“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的内存密集型替代方案。

由于一些奇怪的原因,前面提到的标题似乎解决了它,以前它没有工作,我不确定为什么它现在工作。 无论如何,对于那些不知道这是代码的人:

curl_setopt($handle, CURLOPT_HTTPHEADER, array('Content-Type: text/plain'));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM