在 php 上接收 HTTP Post 数据

Posted

技术标签:

【中文标题】在 php 上接收 HTTP Post 数据【英文标题】:Receiving HTTP Post Data on php 【发布时间】:2016-09-30 18:45:34 【问题描述】:

好的,晚上好

我在从 C++ 程序的 http 请求中接收数据时遇到问题

我用Wininet

InternetOpenA()
InternetConnect()
HttpOpenRequest()
HttpSendRequest()

现在好消息是将程序发送到 php 文件,现在不用担心一切正常

当我执行这样的代码来获取 POST 数据时

<?php
$data = file_get_contents(php://input);
$fp = fopen("log.txt","a+");
fwrite($fp,$data);
fclose($fp);
?>

它获取数据并保存到文本文件。但是当我执行以下操作时

<?php
$data = urldecode($_POST['info']);
$fp = fopen("log.txt","a+");
fwrite($fp,$data);
fclose($fp);
?>

它只是创建 log.txt 而不会在其中保存任何数据。开始认为这是一个 php 问题,但我尝试的每件事都失败了......可能出了什么问题?

【问题讨论】:

你能 print_r($_POST); 吗?您确定您发布的数据内容类型正确吗? (应用程序/x-www-form-urlencoded) 是的,我正在使用我在这里找到的帖子securityblog.gr/1823/… 无论如何,只是为了缩小问题的范围,$_POST 是否为空?同样在您的 C++ 代码中进行编辑,您链接的示例不会发送名为 info 的字段。 $_POST 为空 好的,您需要在您的 C++ 代码中进行编辑。您已经编辑了示例对吗?因为如果你只是运行示例代码,你不会得到info POST 字段。 【参考方案1】:

根据经验,fopen 给我带来了很多错误,它只是在某些方面并不总是有效。 创建一个 mysql 数据库并将日志数据保存在那里,您可以创建一个页面/使用您的 C++ 程序连接到它以获取日志。

【讨论】:

如果它没有显示在空文本中,你曾经尝试过它并保存在数据库中,当它没有显示在文本文件中时?【参考方案2】:

如果您从php://input 获取数据,但$_POST 为空,则您的POST 数据NOT 采用key=value 格式。如果 PHP 找不到任何 key=value 数据,那么它就无法为您构建 $_POST。 $_POST 和其他数组一样是一个数组,所有进入它的数据必须有一个键。没有键,没有数组条目。

【讨论】:

我该怎么做? 您遵循 HTTP 标准来格式化 POST 样式的表单提交,或者您自己解析从 php://input 读取的任何内容。

以上是关于在 php 上接收 HTTP Post 数据的主要内容,如果未能解决你的问题,请参考以下文章

php如何接收别的服务器post过来的数据 - 技术问答

php接收不到java程序post过来的数据

PHP使用POST传递json数据的接收与处理问题

PHP如何接收json数据

PHP获取POST的原始数据的方法

php中$_POST接收不到参数问题