我正在使用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 screenshot和 webpage screenshot
有人可以帮我吗? 为什么我无法从网页获取POST请求,我该如何解决? 任何人都可以给我更好的方法来测试代码吗? 非常感谢你们!
答案 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。