CURLINFO_RESPONSE_CODE не всегда равно 200. Ошибочный ответ может содержать HTML или короткое сообщение, которое не стоит разбирать как успешный JSON.">
Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗cpSpApErr 664 of 696 menu
◀ ▶

Ошибочный ответ API в C++

Число в CURLINFO_RESPONSE_CODE не всегда равно 200.

Ошибочный ответ может содержать HTML или короткое сообщение, которое не стоит разбирать как успешный JSON. Несуществующий путь на typicode дает 404. Сначала проверяют код, и только при 200 передают тело в parse:

#include <iostream> #include <string> #include <curl/curl.h> #include <nlohmann/json.hpp> size_t writeBody( char* ptr, size_t size, size_t nmemb, void* userdata ) { auto* body = static_cast<std::string*>(userdata); body->append(ptr, size * nmemb); return size * nmemb; } int main() { curl_global_init(CURL_GLOBAL_DEFAULT); CURL* curl = curl_easy_init(); std::string body; curl_easy_setopt( curl, CURLOPT_URL, "https://jsonplaceholder.typicode.com/not-a-route" ); curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writeBody); curl_easy_setopt(curl, CURLOPT_WRITEDATA, &body); curl_easy_setopt(curl, CURLOPT_TIMEOUT, 10L); CURLcode res = curl_easy_perform(curl); if (res == CURLE_OK) { long code = 0; curl_easy_getinfo( curl, CURLINFO_RESPONSE_CODE, &code ); if (code == 200) { nlohmann::json note = nlohmann::json::parse(body); std::cout << note.at("note").get<std::string>() << "\n"; } else { std::cout << code << "\n"; } } curl_easy_cleanup(curl); curl_global_cleanup(); return res == CURLE_OK ? 0 : 1; }

Локальная строка с синтаксической ошибкой JSON вызывает nlohmann::json::parse_error. Ее перехватывают, чтобы программа завершилась штатно и напечатала текст причины:

#include <iostream> #include <nlohmann/json.hpp> #include <string> int main() { std::string broken = R"(["a", "b", "c",])"; try { nlohmann::json tags = nlohmann::json::parse(broken); std::cout << tags.size() << "\n"; } catch (const nlohmann::json::parse_error& ex) { std::cout << ex.what() << "\n"; } return 0; }

Дана строка с некорректным JSON. Попытайтесь разобрать ее в nlohmann::json. Выведите результат или текст ошибки, не прерывая работу программы аварийно.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить