使用LibCurl进行HTTP POST

时间:2017-07-05 10:45:40

标签: c++ libcurl

使用libcurl C ++发送POST请求。我尝试了几乎所有组合,除了正确的组合,我无法弄清楚。

curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, FALSE);  /*Not Recommended to use but since certificates are not available this is a workaround added*/
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, FALSE);  /*Not Recommended to use but since certificates are not available this is a workaround added*/

curl_easy_setopt(curl, CURLOPT_HTTPPOST, TRUE);  //CURLOPT_POST does not work as well
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, sJson);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, bytesCallback);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &readBuffer);
curl_easy_setopt(curl, CURLOPT_HEADERFUNCTION, bytesCallback);
curl_easy_setopt(curl, CURLOPT_HEADERDATA, &headBuffer);

sJson是一个std::string,其主体由pb2json创建。

我无法弄清楚为什么身体没被送出去? 如果有libcurl,我是否缺少一些API,任何领导者都会受到赞赏!

1 个答案:

答案 0 :(得分:3)

我希望在这里使用自定义请求CURLOPT_CUSTOMREQUEST下面的代码片段工作正常! 当您使用自定义请求时,没有任何暗示,您必须明确定义CURLOPT_HTTPHEADER

在这里使用一个列表,为简洁起见,我在这里使用了最小的代码。

当你通过sJson使用c type string将其作为c_str()传递时,请记住在传递内容长度时使用+1(我最初错过了),如C中所示只是char数组,按照惯例,它以NULL字节结束。

struct curl_slist* slist = NULL;
slist = curl_slist_append(slist, "Content-Type: application/json");
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, slist);

curl_easy_setopt(curl, CURLOPT_POSTFIELDS, sJson.c_str()); /* data goes here */
curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, sJson.length() + 1); /* data goes here */

编辑:使用curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");可能会在重定向时出现问题,请根据您的使用情况使用它。