c - 使用 libcurl 在 C 中进行 JSON 请求

标签 c json libcurl

我正在使用 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 对象的方法?

非常感谢!

最佳答案

问题可能出在 header 上。当您配置 curl_slist header 时,我认为您应该将 curl_slist_append 的输出分配回 header :

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");

关于c - 使用 libcurl 在 C 中进行 JSON 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11973994/

相关文章:

c - Valgrind:不是堆叠的、malloc 的或(最近)free 的

javascript - jQuery JSON AJAX 请求不同域

c++ - 在 QT 中链接 libCurl 给出了一个巨大的错误列表 C++

java - 在Struts的每个方法中自定义序列化为json的内容

php - 处理来自 AJAX 请求的数据

c++ - 如何使用 curl c++ 源发布 wav 文件数据,如何使用 --data-binary 和 c++?

c++ - 链接到 C++ 库的 Makefile

使用 Shell 脚本更改 C 程序中的某些内容

c - 静态与全局

c - 如何以及在何处调用外部定义的结构