使用libcurl的C中的JSON请求
我在C中使用libcurl定义了带有JSON请求主体的PUT请求。
这就是我的做法:
sprintf(jsonObj, "\"name\" : \"%s\", \"age\" : \"%s\"", name, age); struct curl_slist *headers = NULL;
curl_slist_append(headers, "Accept: application/json");
curl_slist_append(headers, "Content-Type: application/json");
curl_slist_append(headers, "charset: utf-8");
curl_easy_setopt(curl, CURLOPT_URL, url);
curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PUT");
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, jsonObj);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteMemoryCallback);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)&chunk);
curl_easy_setopt(curl, CURLOPT_USERAGENT, "libcrp/0.1");
res = curl_easy_perform(curl);
请求主体将这样到达:
{ '"name" : "Pedro", "age" : "22"' }
随着{ '
在开始和' }
结尾。
- - 更多信息 - - -
如果我声明此代码
char* jsonObj = "{ \"name\" : \"Pedro\" , \"age\" : \"22\" }"; struct curl_slist *headers = NULL;
curl_slist_append(headers, "Accept: application/json");
curl_slist_append(headers, "Content-Type: application/json");
curl_slist_append(headers, "charset: utf-8");
curl_easy_setopt(curl, CURLOPT_URL, url);
curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PUT");
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, jsonObj);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteMemoryCallback);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)&chunk);
curl_easy_setopt(curl, CURLOPT_USERAGENT, "libcrp/0.1");
res = curl_easy_perform(curl);
服务器将其作为请求正文接收:
{ '{ "name" : "Pedro" , "age" : "22" }': '' }
我的问题是:
libCurl是否自动对Json请求进行预格式化/编码?
顺便说一句,libCurl是否具有某种编码JSON对象的方式?
非常感谢!
回答:
问题可能出在标题上。在配置curl_slist标头时,我认为您应该将curl_slist_append的输出分配回标头:
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");
以上是 使用libcurl的C中的JSON请求 的全部内容, 来源链接: utcz.com/qa/429971.html