Форум программистов, компьютерный форум, киберфорум
Boost C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.96/140: Рейтинг темы: голосов - 140, средняя оценка - 4.96
0 / 0 / 0
Регистрация: 19.12.2021
Сообщений: 56

Отправляем GET запрос на сервер и парсим ответ в JSON

19.12.2021, 01:38. Показов 26764. Ответов 26
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include <boost/beast.hpp>
#include <boost/asio/connect.hpp>
#include <boost/asio/ip/tcp.hpp>
#include <string>
 
const static std::string MAIN_API = "api.guildwars2.com";
const static std::string API_ARGUMENTS = "/v2/items";
 
namespace http = boost::beast::http;
 
class Client
{
public:
    static std::string getResponse(std::string ip) 
    {
        boost::asio::io_context io;
        boost::asio::ip::tcp::resolver resolver(io);
        boost::asio::ip::tcp::socket socket(io);
 
        boost::asio::connect(socket, resolver.resolve(MAIN_API, "80"));
 
        http::request<http::string_body> req(http::verb::get, API_ARGUMENTS, 11);
 
        req.set(http::field::host, MAIN_API);
        req.set(http::field::user_agent, BOOST_BEAST_VERSION_STRING);
 
        http::write(socket, req);
 
        std::string response;
        {
            boost::beast::flat_buffer buffer;
            http::response<http::dynamic_body> res;
            http::read(socket, buffer, res);
            response = boost::beast::buffers_to_string(res.body().data());
        }
 
        socket.shutdown(boost::asio::ip::tcp::socket::shutdown_both);
        return response;
    }
 
};
Нашел видео с иснтрукцией (https://www.youtube.com/watch?v=Qwb8gflYs0k).

Подскажите как заставить работать для сайта api.guildwars2.com/v2/items?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
19.12.2021, 01:38
Ответы с готовыми решениями:

Отправляем файл через FormData(), запрос есть, а массив $_FILES пустой (сервер не может распарсить запрос?)
Код практически весь из мурзилки отсюда Задача - отправить файл черех Ajax, поместив в FormData(); Скажу сразу: данные, если верить...

JSON запрос и ответ
Коллеги здравствуйте есть задача отправить на БД запрос через API интерфейс и получить ответ интерфейс представляет собой поле ввода с...

Получить json в ответ на POST запрос
Никак не могу добиться получения json с помощью вывода его через echo в PHP скрипте. Если перенаправлять запрос на файл .json, то всё...

26
0 / 0 / 0
Регистрация: 19.12.2021
Сообщений: 56
20.12.2021, 13:33  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от GbaLog- Посмотреть сообщение
мне кажется должно работать и как в первом посте, только вместо tcp::socket у вас ssl_socket.
разве так не работает?

Code
1
Возникло необработанное исключение по адресу 0x00007FFF24294F69 в test.exe: исключение Microsoft C++: boost::wrapexcept<boost::system::system_error> по адресу памяти 0x0000002D79CFE3F0.
C++
1
2
3
4
5
http::request<http::string_body> req(http::verb::get, API_ARGUMENTS, 11);
        req.set(http::field::host, MAIN_API);
        req.set(http::field::user_agent, BOOST_BEAST_VERSION_STRING);
 
        http::write(socket, req);
Реквест как то по другому делается?

Добавлено через 54 минуты
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#pragma once
#pragma comment (lib, "crypt32")
 
#include <boost/beast.hpp>
#include <boost/asio/connect.hpp>
#include <boost/asio/ip/tcp.hpp>
#include <boost/asio/ssl.hpp>
#include <string>
 
const static std::string MAIN_API = "api.guildwars2.com";
const static std::string API_ARGUMENTS = "/v2/items";
 
using boost::asio::ip::tcp;
namespace http = boost::beast::http;
namespace ssl = boost::asio::ssl; 
typedef ssl::stream<tcp::socket> ssl_socket;
 
class Client
{
public:
    static std::string getResponse(std::string ip)
    {
        boost::asio::io_context io;
        tcp::resolver resolver(io);
        ssl::context ctx(ssl::context::sslv23);
        ctx.set_default_verify_paths();
        ssl_socket socket(io, ctx); 
        
        tcp::resolver::query query("api.guildwars2.com/v2/items", "https");
        boost::asio::connect(socket.lowest_layer(), resolver.resolve(query));
        //boost::asio::connect(socket.lowest_layer(), resolver.resolve(MAIN_API, "80"));
        socket.lowest_layer().set_option(tcp::no_delay(true));
 
        boost::beast::http::request<boost::beast::http::string_body> req(http::verb::get, API_ARGUMENTS, 11);
        req.set(http::field::host, MAIN_API);
        req.set(http::field::user_agent, BOOST_BEAST_VERSION_STRING);
 
        boost::system::error_code ec;
        http::write(socket, req);
 
        std::string response;
        {
            boost::beast::flat_buffer buffer;
            http::response<http::dynamic_body> res;
            http::read(socket, buffer, res);
            response = boost::beast::buffers_to_string(res.body().data());
        }
 
        socket.shutdown();
        return response;
 
    }
 
};
Вот полный код.

Вылазит ошибка когда вызываешь функции:
C++
1
2
3
http::write(socket, req);
http::read(socket, buffer, res);
socket.shutdown();
0
Любитель чаепитий
 Аватар для GbaLog-
3745 / 1801 / 566
Регистрация: 24.08.2014
Сообщений: 6,020
Записей в блоге: 1
20.12.2021, 17:43
Лучший ответ Сообщение было отмечено WEewt345 как решение

Решение

Цитата Сообщение от WEewt345 Посмотреть сообщение
Вылазит ошибка когда вызываешь функции:
а куда handshake делся?
1
0 / 0 / 0
Регистрация: 19.12.2021
Сообщений: 56
20.12.2021, 17:51  [ТС]
Цитата Сообщение от GbaLog- Посмотреть сообщение
а куда handshake делся?
Ура, теперь все заработало
0
0 / 0 / 0
Регистрация: 19.12.2021
Сообщений: 56
21.12.2021, 00:26  [ТС]
Цитата Сообщение от GbaLog- Посмотреть сообщение
а куда handshake делся?
socket.shutdown не нужно делать при работе с ssl?
0
Любитель чаепитий
 Аватар для GbaLog-
3745 / 1801 / 566
Регистрация: 24.08.2014
Сообщений: 6,020
Записей в блоге: 1
21.12.2021, 07:57
Цитата Сообщение от WEewt345 Посмотреть сообщение
socket.shutdown не нужно делать при работе с ssl?
а в связи с чем такой вопрос?
1
0 / 0 / 0
Регистрация: 19.12.2021
Сообщений: 56
21.12.2021, 10:38  [ТС]
Цитата Сообщение от GbaLog- Посмотреть сообщение
а в связи с чем такой вопрос?
C++
1
socket.shutdown(boost::asio::ip::tcp::socket::shutdown_both);
Когда соккет http то shutdown работает, а когда ssl_socket то выдает ошибку Отсутствуют экземпляры.
0
Любитель чаепитий
 Аватар для GbaLog-
3745 / 1801 / 566
Регистрация: 24.08.2014
Сообщений: 6,020
Записей в блоге: 1
21.12.2021, 10:47
Цитата Сообщение от WEewt345 Посмотреть сообщение
Когда соккет http то shutdown работает
нет сокета http, есть сокет tcp и ssl, в вашем случае.
и т.к. вы заменили tcp на ssl, то и интерфейс поменялся. у ssl-сокета метод shutdown параметров не принимает и завершает SSL-соединение, но при этом tcp-сокет, который находится внутри ssl-сокета, до сих пор имеет соединение с сервером.
думаю, можно обойтись и без shutdown'a для tcp-сокета, раз уж ssl-соединение завершилось.
в деструкторе tcp-сокет вызовет close, который завершит соединение за вас.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.12.2021, 10:47

Сервер не возвращает ответ(передача данных формата json по api)
Есть код (сократил для поста), который с некоторой периодичностью передает данные формата json по api. Пока исходный json файл...

Запросы от JSON на PHP ( ответ на посл. запрос )
Здравствуйте форумчане, столкнулся с такой проблемой, принимаю от N-ого сервера JSON запросы и так получается, если запросы поступают при...

JSON отправить запрос и получить ответ php-скриптом
Добрый день! Появилась следующая проблема: есть сайт, на который я отправляю json запрос и должен в ответ так же получить json-ответ: ...

Парсим JSON
Добрый день. Я сформировал валидный JSON. CopePaste сформировал новый класс

JSON запрос на сервер
Добрый Добавлено через 6 минут Добрый вечер Делаю запрос в ВК API: https://vk.com/dev/bots_docs_3 keyboard: { ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
27
Ответ Создать тему
Новые блоги и статьи
Особенности gif сгенерированных в Си
russiannick 21.10.2026
Рассмотрим генерацию gif файлов, которые в Си имеют свои особенности. Gif представляет собой графический формат популярный в интернете. Посмотрим на палитру. Gif файл сгенерированный в си отличается. . .
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/ TL DR Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru