gpt4 book ai didi

使用 cURL + JSON Lib 的 C++ POST 请求

转载 作者:搜寻专家 更新时间:2023-10-31 00:28:05 25 4
gpt4 key购买 nike

我想做一个 POST请求使用 cURL .我正在使用 this (github:nlohmann/json) 库来处理我的 JSON对象创建。我收到 HTTP 200 Response ,但是 POST未附加数据。

调用std::cout<< json_data.dump() << std::endl;时我收到一个格式正确的 JSON .

{
"a": [
{
"c": "0",
"d": "0",
"e": "0",
"f": "0",
"g": "1506961983",
"h": "1506961986",
"i": "3"
},
{
"c": "1",
"d": "2",
"e": "1",
"f": "1",
"g": "1506961987",
"h": "1506961991",
"i": "4"
}
],
"b": "test"
}

我用它来附加我的数据。

   struct curl_slist *headers=NULL; 
headers = curl_slist_append(headers, "Accept: application/json");
headers = curl_slist_append(headers, "Content-Type: application/json");
headers = curl_slist_append(headers, "charset: utf-8");
curl_easy_setopt(curl, CURLOPT_POSTFIELDS,json_data.dump().c_str());

文档 curl_easy_setopt documentation

如果我查看我的 AWS 日志。它说:

{
"format": "json",
"payload": 5,
"qos": 0,
"timestamp": 1506961394810,
"topic": "test_topic"
}

为什么它显示的值是5 而不是我的JSON对象?

感谢您的帮助,如果有人知道原因。

最佳答案

在这一行:

curl_easy_setopt(curl, CURLOPT_POSTFIELDS, json_data.dump().c_str());

dump() 返回的字符串对象是临时的,并在 curl_easy_setopt() 退出时被销毁,因此 CURLOPT_POSTFIELDS 留下一个悬空指针到 libCURL 尝试发布时,它可能仍然指向内存中的 JSON 数据,也可能不指向它。

根据 CURLOPT_POSTFIELDS documentation :

The data pointed to is NOT copied by the library: as a consequence, it must be preserved by the calling application until the associated transfer finishes. This behaviour can be changed (so libcurl does copy the data) by setting the CURLOPT_COPYPOSTFIELDS option.

因此,您需要:

  • CURLOPT_POSTFIELDS 更改为 CURLOPT_COPYPOSTFIELDS:

    curl_easy_setopt(curl, CURLOPT_COPYPOSTFIELDS, json_data.dump().c_str());
  • json_data.dump() 的结果保存到一个在 curl_easy_perform() 退出之前不会超出范围的局部变量:

    std::string json = json_data.dump();
    curl_easy_setopt(curl, CURLOPT_POSTFIELDS, json.c_str());
    ...

关于使用 cURL + JSON Lib 的 C++ POST 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46529983/

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