Есть необходимость встроить в приложуху поддержку HTTP(S). Как клиентскую часть, чтобы пользователь мог заскриптовать обращения к серверу, так и серверную часть, чтобы можно было на коленке забацать сервер.
Что посоветуете для этого использовать?
Какой-нибудь CURL? Там можно сервер сделать?
boost::asio? Там есть поддержка HTTP?
Когда-то использовал cpp_netlib, сейчас оно вроде стало частью буста. Что мне там не понравилось, так это то, что там куча всего определяется на этапе компиляции, а мне нужно, чтобы всё можно было настроить в рантайме.
Здравствуйте, Marty, Вы писали:
M>Что посоветуете для этого использовать?
Все, что есть для C/C++ — плохое, к сожалению.
M>Какой-нибудь CURL? Там можно сервер сделать?
В CURL-е хороший клиент. Сервера нет. И CURL, у него есть неочевидное ограничение. Его явно инициализируют и явно де-инициализируют. Поэтому в программу его вставить можно, а в плагин — нет (если в одной программе встретятся два плагина с CURL-ем внутри, они подерутся).
M>Когда-то использовал cpp_netlib, сейчас оно вроде стало частью буста. Что мне там не понравилось, так это то, что там куча всего определяется на этапе компиляции, а мне нужно, чтобы всё можно было настроить в рантайме.
M>Что посоветуете, может ещё что-то есть хорошее?
Здравствуйте, reversecode, Вы писали:
R>сам напиши R>там суммарно клиент+сервер 100 кил за пару дней в перерыве на ночные посиделки на форуме
Угу. А потом добавь туда connection keep-alive, chunked encoding, правильную поддержку IPv6 и т.п. И окажется, что не на пару дней. Я сам этих ХТТП клиентов и серверов с пяток написал, черт их дери.
R>а вообще нахрен надо это все в дрон который пои тогу все равно собьют?
Чтобы пока он летит, с него можно было пиратский контент качать, нанося ущерб вражескому копирайту.
Здравствуйте, Pzz, Вы писали:
Pzz>Здравствуйте, reversecode, Вы писали:
R>>сам напиши R>>там суммарно клиент+сервер 100 кил за пару дней в перерыве на ночные посиделки на форуме
Pzz>Угу. А потом добавь туда connection keep-alive, chunked encoding, правильную поддержку IPv6 и т.п. И окажется, что не на пару дней. Я сам этих ХТТП клиентов и серверов с пяток написал, черт их дери.
только что нажал в фаре F3 на папку с сервером+клиентом и всего выше перечисленного
95 кил С++
R>>а вообще нахрен надо это все в дрон который пои тогу все равно собьют?
Pzz>Чтобы пока он летит, с него можно было пиратский контент качать, нанося ущерб вражескому копирайту.
да да и порнушки посмотреть
а boost asio для высокой производительности что бы +10500 стримов выдержал
Здравствуйте, reversecode, Вы писали:
R>только что нажал в фаре F3 на папку с сервером+клиентом и всего выше перечисленного R>95 кил С++
Я не понимаю в байтах. В строках-то сколько?
R>да да и порнушки посмотреть R>а boost asio для высокой производительности что бы +10500 стримов выдержал
Но вообще, это немного обидно как-то, в 21-м веке писать очередную реализацию HTTP голыми руками.
Здравствуйте, Pzz, Вы писали:
M>>Какой-нибудь CURL? Там можно сервер сделать?
Pzz>В CURL-е хороший клиент. Сервера нет.
Ок, тоже пойдёт, можно для клиента и для сервера использовать разные либы
Pzz>И CURL, у него есть неочевидное ограничение. Его явно инициализируют и явно де-инициализируют. Поэтому в программу его вставить можно, а в плагин — нет (если в одной программе встретятся два плагина с CURL-ем внутри, они подерутся).
Это не проблема, это в ядро планируется
M>>Когда-то использовал cpp_netlib, сейчас оно вроде стало частью буста. Что мне там не понравилось, так это то, что там куча всего определяется на этапе компиляции, а мне нужно, чтобы всё можно было настроить в рантайме.
M>>Что посоветуете, может ещё что-то есть хорошее?
Pzz>Тебе прям приперло именно на C++ это писать?
Потому, что у меня плюсовый комбайн со скриптованием, в который я хочу присунуть HTTP возможности
Здравствуйте, 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 всякого г
где по итогу как я люблю шутить
исходники такой утилиты "копирования файлов" занимает почти гиг
сборка пол дня
а полезность такой утилиты равна нулю
Здравствуйте, reversecode, Вы писали:
R>ладно выбросил всякий доп функционалы для всяких xml и прочего R>чистый клиент и сервер http/https keep-alive/chunked-transfer/auth basic/digest R>66 кил
Че-то ты не договариваешь. А URL кто за тебя парсит? А IPv4/IPv6 literal addresses? А IPv6 zones?
Здравствуйте, Pzz, Вы писали:
Pzz>А потом добавь туда connection keep-alive, chunked encoding
Это как раз несложно.
Pzz> правильную поддержку IPv6
А при чём тут HTTP?
... << RSDN@Home 1.3.110 alpha 5 rev. 62>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Здравствуйте, so5team, Вы писали:
S>Для клиента:
S>- либо libcurl напрямую, либо через какую-то из C++ных оберток; S>- Boost.Beast; S>- cpp-netlib; S>- POCO.
cpp-netlib — вообще ни разу не была обёрткой над курлом. Либо я очень, очень отстал от жизни, либо качество твоих советов так себе
Здравствуйте, Marty, Вы писали:
M>Здравствуйте, so5team, Вы писали:
S>>- либо libcurl напрямую, либо через какую-то из C++ных оберток; S>>- Boost.Beast; S>>- cpp-netlib; S>>- POCO.
M>cpp-netlib — вообще ни разу не была обёрткой над курлом. Либо я очень, очень отстал от жизни, либо качество твоих советов так себе
Либо вы видите что-то не то, что было написано. А написан перечень вариантов, каждый из которых идет отдельно, не будучи связанным с предыдущим. Т.е. libcurl с его обертками отдельно, Boost.Beast, cpp-netlib и POCO отдельно.
Здравствуйте, so5team, Вы писали:
S>>>- либо libcurl напрямую, либо через какую-то из C++ных оберток;
S>Либо вы видите что-то не то, что было написано. А написан перечень вариантов, каждый из которых идет отдельно, не будучи связанным с предыдущим. Т.е. libcurl с его обертками отдельно, Boost.Beast, cpp-netlib и POCO отдельно.
Либо написано так, что всё перечисленное — только обёртки
Здравствуйте, Marty, Вы писали:
S>>>>- либо libcurl напрямую, либо через какую-то из C++ных оберток;
S>>Либо вы видите что-то не то, что было написано. А написан перечень вариантов, каждый из которых идет отдельно, не будучи связанным с предыдущим. Т.е. libcurl с его обертками отдельно, Boost.Beast, cpp-netlib и POCO отдельно.
M>Либо написано так, что всё перечисленное — только обёртки
Если бы все перечисленное было обертками, то оформлено это было бы так:
— либо libcurl напрямую, либо через какую-то из C++ных оберток:
a) Boost.Beast;
b) cpp-netlib;
c) POCO.
Обратите внимание на наличие двоеточие и изменение типа списка.