簡體   English   中英

C ++ curl_easy_perform()將換行符插入響應

[英]C++ curl_easy_perform() inserts newline into response

我正在使用以下代碼片段從遠程REST API提取43182個字符長的JSON:

string result_;

curl_easy_setopt(curlGET_, CURLOPT_TIMEOUT, CURL_TIMEOUT);
curl_easy_setopt(curlGET_, CURLOPT_URL, url.c_str());
curl_easy_setopt(curlGET_, CURLOPT_VERBOSE, CURL_DEBUG_VERBOSE);
curl_easy_setopt(curlGET_, CURLOPT_WRITEDATA, &result_);
curl_easy_setopt(curlGET_, CURLOPT_WRITEFUNCTION, WriteCallback);

static size_t WriteCallback(void *response,
                            size_t size,
                            size_t nmemb,
                            void *userp) noexcept
        {
            (static_cast<string*>(userp))->append(static_cast<char*>(response));
            return size * nmemb;
        };

curlStatusCode_ = curl_easy_perform(curlGET_);

我在result_得到的是完整的JSON,但在字符31954之后有換行符:

JSON中的換行符

如果我在瀏覽器或命令行curl中獲取相同的JSON,則沒有換行符。 如何為“任意”長的JSON或其他通用響應解決此問題?

從寫回調的CURL 文檔

傳遞給該函數的數據不會被零終止!

WriteCallbackresponse不一定為null終止。 因此,僅將其強制轉換為char*來調用append會調用未定義的行為。 您還必須在append傳遞數據量。

(static_cast<string*>(userp))->append(static_cast<char*>(response), size * nmemb)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM