【问题标题】:getting POST values on PHP using CURL on C++在 C++ 上使用 CURL 在 PHP 上获取 POST 值
【发布时间】:2021-10-05 12:17:01
【问题描述】:

这里是否有人尝试使用 PHP 发布值并使用 CURL 在 c++ 上获取所述值。我已经使用我在谷歌上搜索过的代码进行了尝试,但 CURL 的结果是页面的 html 组合。

PHP

<html>
<head><title>Test Page</title></head>
<body>
    <form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">
        <p>Name:</p><input type="text" name="name">
        <input type="submit">
    </form>
    <?php
        if($_SERVER["REQUEST_METHOD"]=="POST")
        {
            $name = $_POST['name'];
            if(empty($name))
                echo "Name is empty";
            else
                echo $name;
        }
    ?>
</body>

C++ 代码

#include <iostream>
#include "json/json.h"
#include <curl/curl.h>
#include <string.h>

using namespace std;

static size_t WriteCallback(void *contents, size_t size, size_t nmemb, void *userp)
{  
     ((string*)userp)->append((char*)contents, size * nmemb);
     return size * nmemb;
}

int main()
{
     CURL *curl;
     CURLcode curl_res;
     string rBuffer;
     string *s = new string("");

     curl_global_init(CURL_GLOBAL_ALL);

     curl = curl_easy_init();
     if(curl)
     {
         curl_easy_setopt(curl, CURLOPT_URL, "192.168.1.106/testwebserver/index.php");
         curl_easy_setopt(curl, CURLOPT_POST, 1);
         curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "name=test");
         //curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
         //curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
         //curl_easy_setopt(curl, CURLOPT_WRITEDATA, s);
         curl_res = curl_easy_perform(curl);
         if (res != CURLE_OK)
             fprintf(stderr, "curl_easy_perform() failed: %s\n",    curl_easy_strerror(curl_res));
         curl_easy_cleanup(curl);
    }
 }

非常感谢您的帮助。

【问题讨论】:

  • &lt;?php ... ?&gt; 标签之外的所有内容都始终呈现给客户端。这是预期的行为。如果看到 POST 值,您应该更改 PHP 页面以仅呈现 $name,或者更改 C++ 程序以打印 &lt;/form&gt;&lt;/body&gt; 之间的文本
  • @Botje 你有例子吗?
  • ...什么?我给了你两种方法。
  • @Botje 已经使用下面的代码创建了一个单独的 php 页面,但事情是因为 curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "name=test"); ,它只在我运行 c++ 程序时显示“测试”,当我尝试将任何字符或字符串放在 php 上的输入并提交时,c++ 上的输出保持不变。
  • “尝试将任何字符或字符串放在 php 的输入中”是什么意思?您是否在程序的输入流上输入了某些内容,并且您想将 that 发送到 PHP 页面?请edit your question,以便我们查看您的实际问题。

标签: php c++ curl


【解决方案1】:

您的 C++ 脚本会获取整个 PHP 响应。

即包括&lt;html&gt; &lt;head&gt; &lt;body&gt;

如果您只想要回声的响应,请使用:

   <?php
        if($_SERVER["REQUEST_METHOD"]=="POST")
        {
            $name = $_POST['name'];
            if(empty($name))
                echo "Name is empty";
            else
                echo $name;
        }
    ?>

或更短:

<?php
  echo isset($_POST['name'])? $_POST['name'] : "Name is empty" ;
?>

【讨论】:

  • 已经创建了一个单独的php页面,上面有代码,但事情是因为curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "name=test");,它只在我运行c++程序和尝试输入任何字符时显示“测试”或php 上输入的字符串并提交,c++ 上的输出保持不变。
  • @BluStack 我担心我跟不上。你期望会发生什么?当您调用 PHP 脚本(通过 webbrowser 或通过 CURL)时,PHP 代码会返回一堆字符,无论是 POST 中的名称还是您的示例:它周围的所有 HTML,包括要发布的表单.你能描述一下你想要达到的目标吗?
猜你喜欢
  • 2013-12-31
  • 2016-04-06
  • 2016-09-21
  • 1970-01-01
  • 2016-03-09
  • 1970-01-01
  • 1970-01-01
  • 2012-07-13
  • 2010-10-26
相关资源
最近更新 更多