-
ya
- ^-^
- Сообщения: 2336
- Зарегистрирован: 16 дек 2021, 19:56
Сообщение
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
-
ya
- ^-^
- Сообщения: 2336
- Зарегистрирован: 16 дек 2021, 19:56
Сообщение
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;
}
-
ya
- ^-^
- Сообщения: 2336
- Зарегистрирован: 16 дек 2021, 19:56
Сообщение
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