gpt4 book ai didi

c++ - 带有 LibCurl 的 HTTP POST

转载 作者:行者123 更新时间:2023-11-30 02:24:59 26 4
gpt4 key购买 nike

使用 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,我们将不胜感激!

最佳答案

我更喜欢在这里使用自定义请求 CURLOPT_CUSTOMREQUEST 下面是运行良好的代码片段!当您使用自定义请求时,没有任何暗示,您必须显式定义 CURLOPT_HTTPHEADER

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

此外,当您传递 sJson 时,使用 c_str() 将其作为 c 类型字符串 传递,并记住在传递内容时使用 +1 length(我最初不知何故错过了)与在 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"); 可能会在重定向中产生问题,请根据您的用例使用它。

关于c++ - 带有 LibCurl 的 HTTP POST,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44924068/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com