【问题标题】:libcurl: Malformed encoding found in chunked-encodinglibcurl:在分块编码中发现格式错误的编码
【发布时间】:2018-04-11 11:45:37
【问题描述】:

我现在正试图从 Web REST API 获得响应,但由于以下问题(来自 libcurl 调试)而失败

在分块编码中发现格式错误的编码

struct wapi_resp_data {
        char *ptr;
        size_t len;
};

static size_t
write_resp_data(void *data, size_t size, size_t nmemb, void *param)
{
        struct wapi_resp_data *res = (struct wapi_resp_data *) param;

        res->ptr = realloc(res->ptr, res->len + size * nmemb + 1);
        if (!res->ptr) {
                res->len = 0;
                return -1;
        }
        memcpy(&res->ptr[res->len], data, size * nmemb);

        res->len += size * nmemb;
        res->ptr[res->len] = '\0';

        return size * nmemb;
}

int curl_get_response(const char *url, struct curl_slist_headers *headers)
{
   ...

   curl_easy_setopt(curl, CURLOPT_HTTPHEADER, post_headers);
   curl_easy_setopt(curl, CURLOPT_POSTFIELDS, req_data);
   curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, strlen(req_data));

   curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_resp_data);

   memset(&res, 0, sizeof(res));
   curl_easy_setopt(curl, CURLOPT_WRITEDATA, &res);
   ...
}

我尝试使用 curl 命令进行测试,但它可以正常工作。

这是示例命令:

curl -d '{ "test": "test"}' -H "Content-Type: application/json"

http://xxx/api/-v

我的代码有问题吗?

【问题讨论】:

    标签: c curl libcurl


    【解决方案1】:

    这是从服务器接收到的 HTTP 分块编码流的问题。

    如果您使用的是非常旧的 curl,可能会发生这种情况,因为 curl 在 curl 7.35.0 之前更加严格,但从那时起,只要它了解即将发生的事情,它就会尝试变得更加宽松。

    【讨论】:

    • 我正在使用 curl 版本 7.52.1,API 可以很好地与 curl 二进制文件配合使用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-19
    • 1970-01-01
    相关资源
    最近更新 更多