如何在C ++中使用libcurl发送POST请求并接收它?

时间:2018-07-13 03:26:32

标签: c++ http curl libcurl

我正在使用c ++ libcurl将POST请求发送到网页,但是我正在努力对其进行测试。使用的代码是:

#include <stdio.h>
#include <curl/curl.h>
#include <string>
using namespace std;
int main(void)
{
    CURL *curl = curl_easy_init();
    if(curl) {
        const char *data = "submit = 1";

        curl_easy_setopt(curl, CURLOPT_URL, "http://10.5.10.200/website/WebFrontend/backend/posttest.php");

        /* size of the POST data */
        curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, 10L);

        /* pass in a pointer to the data - libcurl will not copy */
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, data);

        curl_easy_perform(curl);
    }


    /* Perform the request, res will get the return code */ 




    /* always cleanup */ 



    return 0;
}

这是来自https://curl.haxx.se/libcurl/c/CURLOPT_POSTFIELDS.html

的示例代码

结果真的使我感到困惑。从终端我可以看到有POST请求已发送,但是从网页上我无法检索任何数据。该网页是非常简单的php代码,可打印$ _POST。 terminal screenshotwebpage screenshot

有人可以帮我吗? 为什么我无法从网页获取POST请求,我该如何解决? 任何人都可以给我更好的方法来测试代码吗? 非常感谢你们!

1 个答案:

答案 0 :(得分:1)

您必须实现一个回调函数,该函数将在收到的每一批数据中由curl调用。

在这里看到一个很好的例子:

https://gist.github.com/alghanmi/c5d7b761b2c9ab199157#file-curl_example-cpp

显然,您可以用WriteCallback()函数中需要的任何数据类型和处理方式替换简单字符串。

复制/粘贴alghanmi的示例:

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


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

int main(void)
{
  CURL *curl;
  CURLcode res;
  std::string readBuffer;

  curl = curl_easy_init();
  if(curl) {
    curl_easy_setopt(curl, CURLOPT_URL, "http://www.google.com");
    curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
    curl_easy_setopt(curl, CURLOPT_WRITEDATA, &readBuffer);
    res = curl_easy_perform(curl);
    curl_easy_cleanup(curl);

    std::cout << readBuffer << std::endl;
  }
  return 0;
}

此外,您还会找到一个不错的教程here