如何解决用于更新值的 curl PATCH 可以作为 curl 命令使用,但在 libcurl c++ 中不行,有什么想法有什么问题吗?
我正在尝试使用 curl 库在 C++ 代码中复制以下 curl 命令,但没有成功。 curl 命令是(url 是一个实际的 url,我只是隐藏了它):
curl -iX PATCH '*URL*/attrs/topicData' \
-H 'Content-Type: application/json' \
-H 'Link: <http://context-provider:3000/data-models/ngsi-context.jsonld>; rel="http://www.w3.org/ns/json-ld#context"; type="application/ld+json"' \
--data-raw '{
"value": "Hi,new data test","type": "Property"
}'
这工作得很好,并根据需要更新值。我的问题是我无法在 C++ 代码中复制它。我正在使用 nlohmann json 库,以防万一。
我的 C++ 代码是:
json ent={
{"type","Property"},{"value","updated successfully"}
};
curl_global_init(CURL_GLOBAL_DEFAULT);
std::string json_entity = ent.dump();
curl = curl_easy_init();
if (curl) {
// Add headers
struct curl_slist *headers = NULL;
headers = curl_slist_append(headers,"Content-Type: application/json");
headers = curl_slist_append(headers,R"(Link: <http://context-provider:3000/data-models/ngsi-context.jsonld>; rel="http://w3.org/ns/json-ld#context"; type="application/ld+json")");
// Set custom headers
curl_easy_setopt(curl,CURLOPT_HTTPHEADER,headers);
// Set URL
curl_easy_setopt(curl,CURLOPT_URL,"*URL*/attrs/topicData");
// Set request type
curl_easy_setopt(curl,CURLOPT_CUSTOMREQUEST,"PATCH");
// Set values
curl_easy_setopt(curl,CURLOPT_POSTFIELDS,json_entity);
// Perform the request which prints to stdout
result = curl_easy_perform(curl);
// Error check
if (result != CURLE_OK) {
std::cerr << "Error during curl request: "
<< curl_easy_strerror(result) << std::endl;
}
//Free header list
curl_slist_free_all(headers);
curl_easy_cleanup(curl);
}
else {
std::cerr << "Error initializing curl." << std::endl;
}
我得到的错误是: "type":"http://uri.etsi.org/ngsi-ld/errors/InvalidRequest","title":"请求无效。","details":"无效请求。"
我认为我的问题在于 set values 命令,但我不确定问题是什么。
有人可以就我做错的事情给我建议吗?
解决方法
CURLOPT_POSTFIELDS
需要 char*
,但您提供的是 std::string
。
这应该会更好:
curl_easy_setopt(curl,CURLOPT_POSTFIELDS,json_entity.data());
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。