Страница 1 из 1

api curl json

Добавлено: 25 сен 2024, 16:42
ya
JSON для современного C ++
https://json.nlohmann.me/api/basic_json/

curl_easy_setopt - задает параметры для упрощения обработки запроса
https://curl.se/libcurl/c/curl_easy_setopt.html

Публичный Web API
https://api.elma365.com/ru/public-api/reference/

Обертка для работы с API BPM Elma365.
https://github.com/glsv/elma-api

Код: Выделить всё

sudo apt install libcurl4-openssl-dev nlohmann-json3-dev 

Код: Выделить всё

#include <iostream>
#include <string>
#include <curl/curl.h>
#include <nlohmann/json.hpp>

using json = nlohmann::json;

// Функция-обработчик для получения данных через curl
size_t WriteCallback(void* contents, size_t size, size_t nmemb, void* userp) {
    ((std::string*)userp)->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    // Инициализация libcurl
    CURL* curl;
    CURLcode res;

    curl = curl_easy_init();
    if(curl) {
        std::string read_buffer;
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);

        curl_easy_setopt(curl, CURLOPT_URL, "https://localhost/pub/v1/user/list"); // Замените на ваш URL
 //       curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers); // Use the custom headers
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &read_buffer);

        // Выполнение запроса
        res = curl_easy_perform(curl);
        
        
        
        if(res != CURLE_OK) {
            std::cerr << "curl_easy_perform() failed: " << curl_easy_strerror(res) << std::endl;
        } else {
            // Парсинг JSON
            try {
 //             std::cout << read_buffer << std::endl << std::endl;
                json j = json::parse(read_buffer);
                std::cout << "Parsed JSON:\n" << j.dump(4) << std::endl; // Вывод отформатированного JSON
  //             std::cout << "Parsed JSON:\n" << j << std::endl; // Вывод отформатированного JSON

                // Пример доступа к данным
                // std::cout << j["key"] << std::endl; // замените "key" на ваш ключ
            } catch (json::parse_error& e) {
                std::cerr << "JSON parse error: " << e.what() << std::endl;
            }
        }

        // Очистка ресурсов
        curl_easy_cleanup(curl);
     
    }
    //delete curl;
    return 0;
}
Компиляция:

Код: Выделить всё

g++ -std=c++11 -o curl_elma curl_elma.cpp -lcurl

Re: api curl json

Добавлено: 26 сен 2024, 11:27
ya

Код: Выделить всё

#include <iostream>
#include <string>
#include <curl/curl.h>
#include <nlohmann/json.hpp>

using json = nlohmann::json;

// Функция-обработчик для получения данных через curl
size_t WriteCallback(void* contents, size_t size, size_t nmemb, void* userp) {
    ((std::string*)userp)->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    // Инициализация libcurl
    CURL* curl;
    CURLcode res;

    curl = curl_easy_init();
    if(curl) {
        // JSON-запрос
        json json_data = json::parse(R"({
        
         })");
       
        std::string read_buffer;
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);

        curl_easy_setopt(curl, CURLOPT_URL, "https://localhost/pub/v1/app/doc/contract/list");
        //curl_easy_setopt(curl, CURLOPT_URL, "https://localhost/pub/v1/user/list");
        curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 0L); // Прогресс загрузки
        curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, true);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, json_data.dump().c_str());
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &read_buffer);

        // Выполнение запроса
        res = curl_easy_perform(curl);
        
        if(res != CURLE_OK) {
            std::cerr << "curl_easy_perform() failed: " << curl_easy_strerror(res) << std::endl;
        } else {
            // Парсинг JSON
            try {
                json j = json::parse(read_buffer);
                std::cout << "Parsed JSON:\n" << j.dump(4) << std::endl; // Вывод отформатированного JSON
            } catch (json::parse_error& e) {
                std::cerr << "JSON parse error: " << e.what() << std::endl;
            }
        }

        // Очистка ресурсов
        curl_easy_cleanup(curl);
        curl_slist_free_all(headers); // Освобождение заголовков
    }

    return 0;
}

Re: api curl json

Добавлено: 03 окт 2024, 12:14
ya

Код: Выделить всё

#include <iostream>
#include <string>
#include <curl/curl.h>
#include <nlohmann/json.hpp>

using json = nlohmann::json;

// Функция-обработчик для получения данных через curl
size_t WriteCallback(void* contents, size_t size, size_t nmemb, void* userp) {
    ((std::string*)userp)->append((char*)contents, size * nmemb);
    return size * nmemb;
}

// Функция для удаления BOM из строки
std::string removeBOM(const std::string& input) {
    const std::string BOM = "\xef\xbb\xbf"; // UTF-8 BOM
    if (input.find(BOM) == 0) {
        return input.substr(BOM.size());
    }
    return input;
}

int main() {
    // Инициализация libcurl
    CURL* curl;
    CURLcode res;

    curl = curl_easy_init();
    if(curl) {
        // JSON-запрос
        json json_data = json::parse(R"({
                
    })");
        
        json_data["context"]["doc_text_agr"] =  "Измененено с помощью с++11 \" ";
       
        
        std::string json_string = json_data.dump();
        json_string = removeBOM(json_string); // Удаление BOM
        
        std::string read_buffer;
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);

        //curl_easy_setopt(curl, CURLOPT_URL, "https://localhost/pub/v1/app/doc/contract/list");
        //curl_easy_setopt(curl, CURLOPT_URL, "https://localhost/pub/v1/user/list");
        //curl_easy_setopt(curl, CURLOPT_URL, "https://localhost/pub/v1/contracts/doc/archive/list");
       // curl_easy_setopt(curl, CURLOPT_URL, "https://localhost/pub/v1/app/list");  // получение списка приложений
       // curl_easy_setopt(curl, CURLOPT_URL, "https://localhost/pub/v1/bpm/instance/bytarget/list"); // Получение списка экземпляров процесса для цели Работа с бизнес-процессами
       // curl_easy_setopt(curl, CURLOPT_URL, "https://localhost/pub/v1/disk/directory/list"); // Получение списка директорий
          curl_easy_setopt(curl, CURLOPT_URL, "https://localhost/pub/v1/app/doc/contract/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/update"); //изменение


        curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 0L); // Прогресс загрузки
        curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, true);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, json_string.c_str());
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &read_buffer);

        // Выполнение запроса
        res = curl_easy_perform(curl);
        std::cout << json_data.dump().c_str() << std::endl;
        
        if(res != CURLE_OK) {
            std::cerr << "curl_easy_perform() failed: " << curl_easy_strerror(res) << std::endl;
        } else {
            // Парсинг JSON
            try {
                json j = json::parse(read_buffer);
                std::cout << "Parsed JSON:\n" << j.dump(4) << std::endl; // Вывод отформатированного JSON
            } catch (json::parse_error& e) {
                std::cerr << "JSON parse error: " << e.what() << std::endl;
                std::cout << read_buffer << std::endl;
            }
        }

        // Очистка ресурсов
        curl_easy_cleanup(curl);
        curl_slist_free_all(headers); // Освобождение заголовков
    }

    return 0;
}




Код: Выделить всё

g++ -std=c++11 -o curl_elma-0.0.1 curl_elma-0.0.1.cpp -lcurl -s