Встроенный HTTP, клиент и сервер
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 31.01.24 18:27
Оценка:
Здравствуйте!

Есть необходимость встроить в приложуху поддержку HTTP(S). Как клиентскую часть, чтобы пользователь мог заскриптовать обращения к серверу, так и серверную часть, чтобы можно было на коленке забацать сервер.

Что посоветуете для этого использовать?

Какой-нибудь CURL? Там можно сервер сделать?

boost::asio? Там есть поддержка HTTP?

Когда-то использовал cpp_netlib, сейчас оно вроде стало частью буста. Что мне там не понравилось, так это то, что там куча всего определяется на этапе компиляции, а мне нужно, чтобы всё можно было настроить в рантайме.

Что посоветуете, может ещё что-то есть хорошее?
Маньяк Робокряк колесит по городу
Re: Встроенный HTTP, клиент и сервер
От: Pzz Россия https://github.com/alexpevzner
Дата: 31.01.24 18:46
Оценка:
Здравствуйте, Marty, Вы писали:

M>Что посоветуете для этого использовать?


Все, что есть для C/C++ — плохое, к сожалению.

M>Какой-нибудь CURL? Там можно сервер сделать?


В CURL-е хороший клиент. Сервера нет. И CURL, у него есть неочевидное ограничение. Его явно инициализируют и явно де-инициализируют. Поэтому в программу его вставить можно, а в плагин — нет (если в одной программе встретятся два плагина с CURL-ем внутри, они подерутся).

M>Когда-то использовал cpp_netlib, сейчас оно вроде стало частью буста. Что мне там не понравилось, так это то, что там куча всего определяется на этапе компиляции, а мне нужно, чтобы всё можно было настроить в рантайме.


M>Что посоветуете, может ещё что-то есть хорошее?


Тебе прям приперло именно на C++ это писать?
Re: Встроенный HTTP, клиент и сервер
От: Nuzhny Россия https://github.com/Nuzhny007
Дата: 31.01.24 18:51
Оценка:
Здравствуйте, Marty, Вы писали:

M>boost::asio? Там есть поддержка HTTP?


Есть в виде boost::beast
Re: Встроенный HTTP, клиент и сервер
От: reversecode google
Дата: 31.01.24 18:51
Оценка: +1 :)
сам напиши
там суммарно клиент+сервер 100 кил за пару дней в перерыве на ночные посиделки на форуме

а вообще нахрен надо это все в дрон который пои тогу все равно собьют?
Re[2]: Встроенный HTTP, клиент и сервер
От: Pzz Россия https://github.com/alexpevzner
Дата: 31.01.24 20:05
Оценка: +2
Здравствуйте, reversecode, Вы писали:

R>сам напиши

R>там суммарно клиент+сервер 100 кил за пару дней в перерыве на ночные посиделки на форуме

Угу. А потом добавь туда connection keep-alive, chunked encoding, правильную поддержку IPv6 и т.п. И окажется, что не на пару дней. Я сам этих ХТТП клиентов и серверов с пяток написал, черт их дери.

R>а вообще нахрен надо это все в дрон который пои тогу все равно собьют?


Чтобы пока он летит, с него можно было пиратский контент качать, нанося ущерб вражескому копирайту.
Re[3]: Встроенный HTTP, клиент и сервер
От: reversecode google
Дата: 31.01.24 20:08
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>Здравствуйте, reversecode, Вы писали:


R>>сам напиши

R>>там суммарно клиент+сервер 100 кил за пару дней в перерыве на ночные посиделки на форуме

Pzz>Угу. А потом добавь туда connection keep-alive, chunked encoding, правильную поддержку IPv6 и т.п. И окажется, что не на пару дней. Я сам этих ХТТП клиентов и серверов с пяток написал, черт их дери.


только что нажал в фаре F3 на папку с сервером+клиентом и всего выше перечисленного
95 кил С++

R>>а вообще нахрен надо это все в дрон который пои тогу все равно собьют?


Pzz>Чтобы пока он летит, с него можно было пиратский контент качать, нанося ущерб вражескому копирайту.


да да и порнушки посмотреть
а boost asio для высокой производительности что бы +10500 стримов выдержал
Re[4]: Встроенный HTTP, клиент и сервер
От: Pzz Россия https://github.com/alexpevzner
Дата: 31.01.24 20:11
Оценка:
Здравствуйте, reversecode, Вы писали:

R>только что нажал в фаре F3 на папку с сервером+клиентом и всего выше перечисленного

R>95 кил С++

Я не понимаю в байтах. В строках-то сколько?

R>да да и порнушки посмотреть

R>а boost asio для высокой производительности что бы +10500 стримов выдержал

Но вообще, это немного обидно как-то, в 21-м веке писать очередную реализацию HTTP голыми руками.
Re[2]: Встроенный HTTP, клиент и сервер
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 31.01.24 20:22
Оценка:
Здравствуйте, Pzz, Вы писали:

M>>Какой-нибудь CURL? Там можно сервер сделать?


Pzz>В CURL-е хороший клиент. Сервера нет.


Ок, тоже пойдёт, можно для клиента и для сервера использовать разные либы


Pzz>И CURL, у него есть неочевидное ограничение. Его явно инициализируют и явно де-инициализируют. Поэтому в программу его вставить можно, а в плагин — нет (если в одной программе встретятся два плагина с CURL-ем внутри, они подерутся).


Это не проблема, это в ядро планируется


M>>Когда-то использовал cpp_netlib, сейчас оно вроде стало частью буста. Что мне там не понравилось, так это то, что там куча всего определяется на этапе компиляции, а мне нужно, чтобы всё можно было настроить в рантайме.


M>>Что посоветуете, может ещё что-то есть хорошее?


Pzz>Тебе прям приперло именно на C++ это писать?


Потому, что у меня плюсовый комбайн со скриптованием, в который я хочу присунуть HTTP возможности
Маньяк Робокряк колесит по городу
Re[2]: Встроенный HTTP, клиент и сервер
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 31.01.24 20:23
Оценка:
Здравствуйте, Nuzhny, Вы писали:

M>>boost::asio? Там есть поддержка HTTP?


N>Есть в виде boost::beast


Там всё в рантайме можно настроить, или как в cpp_netlib — все фичи задаются в плюсах как параметры шаблонов?
Маньяк Робокряк колесит по городу
Re[2]: Встроенный HTTP, клиент и сервер
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 31.01.24 20:24
Оценка:
Здравствуйте, reversecode, Вы писали:

R>сам напиши

R>там суммарно клиент+сервер 100 кил за пару дней в перерыве на ночные посиделки на форуме

А ты оптимист


R>а вообще нахрен надо это все в дрон который пои тогу все равно собьют?


Ну вот надо
Маньяк Робокряк колесит по городу
Re[5]: Встроенный HTTP, клиент и сервер
От: reversecode google
Дата: 31.01.24 21:36
Оценка: +1 :)
Здравствуйте, Pzz, Вы писали:

Pzz>Здравствуйте, reversecode, Вы писали:


R>>только что нажал в фаре F3 на папку с сервером+клиентом и всего выше перечисленного

R>>95 кил С++

Pzz>Я не понимаю в байтах. В строках-то сколько?


любите вы дедушек помучить
ладно выбросил всякий доп функционалы для всяких xml и прочего
чистый клиент и сервер http/https keep-alive/chunked-transfer/auth basic/digest
66 кил

tokei-i686-pc-windows-msvc.exe httplib\


===============================================================================
 Language            Files        Lines         Code     Comments       Blanks
===============================================================================
 C Header                8          578          465            7          106
 C++                     8         2230         1776           86          368
===============================================================================
 Total                  16         2808         2241           93          474
===============================================================================

там нет файла для сокетов и ивент лупа и парсинга url схемы
они отдельно около 100 кил

tokei-i686-pc-windows-msvc.exe netlib\

===============================================================================
 Language            Files        Lines         Code     Comments       Blanks
===============================================================================
 C Header                7          623          489           11          123
 C++                     8         3286         2654          182          450
===============================================================================
 Total                  15         3909         3143          193          573
===============================================================================


при этом надо учесть что там win/linux поддержка
из за всяких ifdef

за то точно можно сразу марти компилить и хоть в пляс

R>>да да и порнушки посмотреть

R>>а boost asio для высокой производительности что бы +10500 стримов выдержал

Pzz>Но вообще, это немного обидно как-то, в 21-м веке писать очередную реализацию HTTP голыми руками.


странно в 21 веке юзать всякое г которые тянет еще +10500 всякого г
где по итогу как я люблю шутить

исходники такой утилиты "копирования файлов" занимает почти гиг
сборка пол дня
а полезность такой утилиты равна нулю

Re[6]: Встроенный HTTP, клиент и сервер
От: Pzz Россия https://github.com/alexpevzner
Дата: 31.01.24 22:15
Оценка:
Здравствуйте, reversecode, Вы писали:

R>ладно выбросил всякий доп функционалы для всяких xml и прочего

R>чистый клиент и сервер http/https keep-alive/chunked-transfer/auth basic/digest
R>66 кил

Че-то ты не договариваешь. А URL кто за тебя парсит? А IPv4/IPv6 literal addresses? А IPv6 zones?
Re[6]: Встроенный HTTP, клиент и сервер
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 31.01.24 23:07
Оценка:
Здравствуйте, reversecode, Вы писали:

R>любите вы дедушек помучить


Мы реалисты
Написать можно за неделю.
Отлаживать можно годами.
Нахер
Маньяк Робокряк колесит по городу
Re[3]: Встроенный HTTP, клиент и сервер
От: CreatorCray  
Дата: 31.01.24 23:08
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>А потом добавь туда connection keep-alive, chunked encoding

Это как раз несложно.

Pzz> правильную поддержку IPv6

А при чём тут HTTP?
... << RSDN@Home 1.3.110 alpha 5 rev. 62>>
Re[4]: Встроенный HTTP, клиент и сервер
От: Pzz Россия https://github.com/alexpevzner
Дата: 31.01.24 23:13
Оценка:
Здравствуйте, CreatorCray, Вы писали:

Pzz>> правильную поддержку IPv6

CC>А при чём тут HTTP?

Там свои нюансы.
Re: Встроенный HTTP, клиент и сервер
От: so5team https://stiffstream.com
Дата: 01.02.24 04:31
Оценка: +1
Здравствуйте, Marty, Вы писали:

M>Что посоветуете для этого использовать?


Для клиента:

— либо libcurl напрямую, либо через какую-то из C++ных оберток;
Boost.Beast;
cpp-netlib;
POCO.

Для сервера:

Boost.Beast;
cpp-netlib;
CROW (реанимированный);
Drogon;
lithium (бывший silicon framework);
oat++;
Pistache;
POCO;
proxygen;
restbed;
RESTinio;
Simple-Web-Server;
userver.

Возможно, в userver есть и клиент, не в курсе.
Re[2]: Встроенный HTTP, клиент и сервер
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 01.02.24 04:34
Оценка: :))
Здравствуйте, so5team, Вы писали:

S>Для клиента:


S>- либо libcurl напрямую, либо через какую-то из C++ных оберток;

S>- Boost.Beast;
S>- cpp-netlib;
S>- POCO.

cpp-netlib — вообще ни разу не была обёрткой над курлом. Либо я очень, очень отстал от жизни, либо качество твоих советов так себе
Маньяк Робокряк колесит по городу
Re[3]: Встроенный HTTP, клиент и сервер
От: so5team https://stiffstream.com
Дата: 01.02.24 05:00
Оценка: +1
Здравствуйте, Marty, Вы писали:

M>Здравствуйте, so5team, Вы писали:


S>>- либо libcurl напрямую, либо через какую-то из C++ных оберток;

S>>- Boost.Beast;
S>>- cpp-netlib;
S>>- POCO.

M>cpp-netlib — вообще ни разу не была обёрткой над курлом. Либо я очень, очень отстал от жизни, либо качество твоих советов так себе


Либо вы видите что-то не то, что было написано. А написан перечень вариантов, каждый из которых идет отдельно, не будучи связанным с предыдущим. Т.е. libcurl с его обертками отдельно, Boost.Beast, cpp-netlib и POCO отдельно.
Re[4]: Встроенный HTTP, клиент и сервер
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 01.02.24 05:17
Оценка:
Здравствуйте, so5team, Вы писали:

S>>>- либо libcurl напрямую, либо через какую-то из C++ных оберток;


S>Либо вы видите что-то не то, что было написано. А написан перечень вариантов, каждый из которых идет отдельно, не будучи связанным с предыдущим. Т.е. libcurl с его обертками отдельно, Boost.Beast, cpp-netlib и POCO отдельно.


Либо написано так, что всё перечисленное — только обёртки
Маньяк Робокряк колесит по городу
Re[5]: Встроенный HTTP, клиент и сервер
От: so5team https://stiffstream.com
Дата: 01.02.24 05:28
Оценка:
Здравствуйте, Marty, Вы писали:

S>>>>- либо libcurl напрямую, либо через какую-то из C++ных оберток;


S>>Либо вы видите что-то не то, что было написано. А написан перечень вариантов, каждый из которых идет отдельно, не будучи связанным с предыдущим. Т.е. libcurl с его обертками отдельно, Boost.Beast, cpp-netlib и POCO отдельно.


M>Либо написано так, что всё перечисленное — только обёртки


Если бы все перечисленное было обертками, то оформлено это было бы так:

— либо libcurl напрямую, либо через какую-то из C++ных оберток:
a) Boost.Beast;
b) cpp-netlib;
c) POCO.

Обратите внимание на наличие двоеточие и изменение типа списка.

ЗЫ. Помогай после этого людям
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.