使用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

回到顶部