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

时间:2012-10-27 10:08:33

标签: php post curl

我正在尝试使用 $ 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 ),这似乎不会影响任何内容

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

2 个答案:

答案 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是否确实已填充,从上面的页面中需要:

  1. .ini变量always_populate_raw_post_data为True,
  2. 或POST与POST处理程序无法识别的Content-Type一起发送(也许可以使用“text / raw”)
  3. 此时,正确的发送数据的方式是

    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'));
相关问题