c++ - 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;
}
我得到的错误是:“类型”:“http://uri.etsi.org/ngsi-ld/errors/InvalidRequest”,“标题”:“无效请求。”,“详细信息”:“无效请求。 "
我认为我的问题在于设置值命令,但我不确定问题是什么。
谁能告诉我我做错了什么?
解决方案
CURLOPT_POSTFIELDS
期望 achar*
但您提供的是std::string
.
这应该会更好:
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, json_entity.data());
推荐阅读
- javascript - 如何在 JavaScript 中过滤和映射对象数组?
- hibernate - 用户身份验证或验证
- xslt - XSLT 2.0:如果仅由标点分隔,则合并兄弟节点
- qr-code - 用于 QR 码的 Reed Solomon 纠错
- playframework-2.6 - 是否已弃用 Action 对象?它的替代品是什么
- c++ - 在主窗口中将 QVBoxLayout 设置为全尺寸,没有间距或边框
- autohotkey - 这个变量没有被赋值(一个全局变量)
- arrays - vlookup 和绝对引用以及 lastrow VBA 的问题
- kubernetes - 卷工作时日志中的“FindExpandablePluginBySpec err:没有卷插件匹配”消息
- angular - 将全局 NavigationExtras 添加到路由器的每个导航操作