使用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,任何领导者都会受到赞赏!
答案 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");
可能会在重定向时出现问题,请根据您的使用情况使用它。