在 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 数据的主要内容,如果未能解决你的问题,请参考以下文章