【问题标题】:Receiving HTTP Post Data on php在 php 上接收 HTTP Post 数据
【发布时间】: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 字段。

标签: php c++ wininet


【解决方案1】:

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

【讨论】:

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

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

【讨论】:

  • 我该怎么做?
  • 您遵循 HTTP 标准来格式化 POST 样式的表单提交,或者您自己解析从 php://input 读取的任何内容。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-28
  • 2018-08-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多