Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗cpSpApInr 657 of 696 menu
◀ ▶

Введение в запросы к API в C++

Веб-API часто отвечает не HTML, а текстом JSON.

Клиент libcurl получает его как обычную строку в теле ответа, после чего ту же строку передают методу nlohmann::json::parse из заголовка nlohmann/json.hpp.

Публичный каталог jsonplaceholder.typicode.com отдает записи пользователей. Достаточно одного чтения по адресу "/users/1", затем разбор только нужных полей:

#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/users/1" ); 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) { nlohmann::json user = nlohmann::json::parse(body); std::cout << user.at("id").get<int>() << "\n"; std::cout << user.at("name").get<std::string>() << "\n"; } curl_easy_cleanup(curl); curl_global_cleanup(); return res == CURLE_OK ? 0 : 1; }

В тексте от сервера есть и другие ключи - почта, адрес, компания. Достаточно читать только id и name через at, лишние поля остаются в дереве, но программа их не трогает.

Тот же прием работает, если нужны идентификатор и почта вместо имени - лишние ключи по-прежнему не мешают:

#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/users/1" ); 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) { nlohmann::json user = nlohmann::json::parse(body); std::cout << user.at("email").get<std::string>() << "\n"; } curl_easy_cleanup(curl); curl_global_cleanup(); return res == CURLE_OK ? 0 : 1; }
← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить