Есть необходимость встроить в приложуху поддержку 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?
Здравствуйте, 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.
Обратите внимание на наличие двоеточие и изменение типа списка.
Здравствуйте, Pzz, Вы писали:
Pzz>Угу. А потом добавь туда connection keep-alive, chunked encoding, правильную поддержку IPv6 и т.п. И окажется, что не на пару дней. Я сам этих ХТТП клиентов и серверов с пяток написал, черт их дери.
Не всем это всё надо. Далеко не всем. По-мне вся прелесть HTTP/1.1 или даже 1.0 в том, что можно очень многие сложности проигнорировать и оно будет работать, пусть и не так быстро, да и пофиг.
Здравствуйте, vsb, Вы писали:
Pzz>>Угу. А потом добавь туда connection keep-alive, chunked encoding, правильную поддержку IPv6 и т.п. И окажется, что не на пару дней. Я сам этих ХТТП клиентов и серверов с пяток написал, черт их дери.
vsb>Не всем это всё надо. Далеко не всем. По-мне вся прелесть HTTP/1.1 или даже 1.0 в том, что можно очень многие сложности проигнорировать и оно будет работать, пусть и не так быстро, да и пофиг.
Или не будет. Ну, если какую-то из половин писали на коленке руками, например
Здравствуйте, vsb, Вы писали:
vsb>Не всем это всё надо. Далеко не всем. По-мне вся прелесть HTTP/1.1 или даже 1.0 в том, что можно очень многие сложности проигнорировать и оно будет работать, пусть и не так быстро, да и пофиг.
Если ты сервер, тебе могут отлить этого chunked-encoding-а, не спрашивая твоего мнения. Хорошо при этом, если ты какой-нибудь принтер, тогда это становится проблемой драйвера. А если просто сайт, то бровсер под тебя подстраиваться не будет.
Здравствуйте, Marty, Вы писали:
M>>>Извини, у меня на монике мухи поседели, не всегда colon и semicolon различаю
Q>>Седые мухи. Q>>Спасибо, рассмешил.
M>Я пять сик думал, как написать, чтобы было забавно. Но я не думал, что найдётся кэп, который догадается ответить. Сорян, мой косяк
Здравствуйте, Marty, Вы писали:
M>>Я пять сик думал, как написать, чтобы было забавно. Но я не думал, что найдётся кэп, который догадается ответить. Сорян, мой косяк
M>Но седые мухи — это и правда смешно
И чем дальше — тем больше.
Как представлю мух, седеющих у меня на мониторе, как они, седые, седыми лапками ходят по нему — чот ржать тянет. Не могу асталависта, не могу
Здравствуйте, Pzz, Вы писали:
Pzz>Если ты сервер, тебе могут отлить этого chunked-encoding-а, не спрашивая твоего мнения. Хорошо при этом, если ты какой-нибудь принтер, тогда это становится проблемой драйвера. А если просто сайт, то бровсер под тебя подстраиваться не будет.
Браузер не использует chunked encoding (в запросах). По крайней мере мне неизвестен способ заставить его это делать. Может быть очень хитрым жаваскриптом, да и то сомневаюсь.
Здравствуйте, vsb, Вы писали:
Pzz>>Если ты сервер, тебе могут отлить этого chunked-encoding-а, не спрашивая твоего мнения. Хорошо при этом, если ты какой-нибудь принтер, тогда это становится проблемой драйвера. А если просто сайт, то бровсер под тебя подстраиваться не будет.
vsb>Браузер не использует chunked encoding (в запросах). По крайней мере мне неизвестен способ заставить его это делать. Может быть очень хитрым жаваскриптом, да и то сомневаюсь.
Там же можно послать POST-ом что-то, размер чего заранее не известен, да? В таком случае, ему выбора не останется, кроме как сделать chunked.
Здравствуйте, Pzz, Вы писали:
Pzz>Там же можно послать POST-ом что-то, размер чего заранее не известен, да?
Ну вот я сходу не скажу — можно или нет. Несколько лет назад было нельзя. В последние годы вроде что-то в JS на тему стримов добавляли. Но это надо пробовать — можно ли такое засунуть в тело запроса и не пошлёт ли браузер лесом (или не начнёт ли считывать этот стрим в буфер).
В любом случае это надо очень постараться, чтобы такое найти.
Не, если ты делаешь универсальный веб-сервер — без вопросов, там такое желательно поддержать. Когда ты юзаешь http client из разных ЯП, там chunked запрос даже случайно получить несложно (хотя всё же нормальные либы стараются начать буферизовать тело запроса и только если оно действительно большое — уже отсылать чанки). А если ты делаешь веб-сервер для какой-нибудь админки, которую тут же рядом и отдаёшь, то всё куда проще, имхо.
Здравствуйте, reversecode, Вы писали:
R>ты количества флуда за неделю написал больше чем сервер или клинет отдельно взятые
R>ну а про поиски багов в простой математике 2+2 это ты фантазер, да R>умей правильно декомпозицию делать R>тогда не будет херни с багами
R>а когда всю математику разворачивать в отдельное действие R>то да, за лесом елей не видать
Я, в отличие от балаболов типа тебя, написал не один HTTP сервер для встраивания в любые утюги, и именно имея опыт я не хочу делать это снова, и даже все наработки с удовольствием выкину
Здравствуйте, Pzz, Вы писали:
Pzz>Если ты сервер, тебе могут отлить этого chunked-encoding-а, не спрашивая твоего мнения.
А в чём проблема его реализовать? Даже я в своём наколенном клиенте сделал, исключительно чтоб большие куски данных сливать/заливать на GDrive
Здравствуйте, Marty, Вы писали:
M>Я, в отличие от балаболов типа тебя, написал не один HTTP сервер для встраивания в любые утюги
В таком случае, ты ещё один напишешь не приходя в сознание.
M> и именно имея опыт я не хочу делать это снова "Вытащи из болота хоть один из тех тракторов, что ты там утопил, и езжай на нём к едрени матери!" (С)
Заюзай один из тех, что тобой уже написаны.
M> и даже все наработки с удовольствием выкину
Что, такое лютое говно получилось?
Здравствуйте, CreatorCray, Вы писали:
M>>Я, в отличие от балаболов типа тебя, написал не один HTTP сервер для встраивания в любые утюги CC>В таком случае, ты ещё один напишешь не приходя в сознание.
нет, не напишу, я уже понимаю масштаб проблемы
M>> и именно имея опыт я не хочу делать это снова CC>"Вытащи из болота хоть один из тех тракторов, что ты там утопил, и езжай на нём к едрени матери!" (С) CC>Заюзай один из тех, что тобой уже написаны.
утюговый сервер не равен универсальному
M>> и даже все наработки с удовольствием выкину CC>Что, такое лютое говно получилось?
Не совсем лютое говно. Заказ сделал, бабло получил. Там на чистой сишечке под совсем утюги, не хочу, во вторых, там оно могло отстать от актуальных RFC, у меняя нет цели сидеть следить как там RFC, обновились или нет, мне нужно что-то, что поддерживалось бы не мной. С возрастом это приходит, желание перестать ковыряться в говне, а оперировать более масштабными задачами
Здравствуйте, CreatorCray, Вы писали:
Pzz>>Если ты сервер, тебе могут отлить этого chunked-encoding-а, не спрашивая твоего мнения. CC>А в чём проблема его реализовать? Даже я в своём наколенном клиенте сделал, исключительно чтоб большие куски данных сливать/заливать на GDrive
1) Можно, но зачем?
2) Оно только с конкретным серверным софтом взаимодействует, или готово для всего?
Здравствуйте, CreatorCray, Вы писали:
M>>>Извини, у меня на монике мухи поседели, не всегда colon и semicolon различаю Q>>Седые мухи.
CC>Чота мне кажется что там должно было быть "посИдели", ака "засиженый мухами моник"
Здравствуйте, reversecode, Вы писали:
R>куда ему, он всю ночь нацистов ловил и в штурмовые атаки ходил R>понятно что уже к обеду выдохся вместе с мухами
Здравствуйте, reversecode, Вы писали:
R>куда ему, он всю ночь нацистов ловил и в штурмовые атаки ходил R>понятно что уже к обеду выдохся вместе с мухами
Здравствуйте, CreatorCray, Вы писали:
Pzz>>Если ты сервер, тебе могут отлить этого chunked-encoding-а, не спрашивая твоего мнения. CC>А в чём проблема его реализовать? Даже я в своём наколенном клиенте сделал, исключительно чтоб большие куски данных сливать/заливать на GDrive
Да ни в чём. Просто HTTP считается простым текстовым протоколом, который можно реализовать на коленке за вечер. Но со всеми этими "мелочами" уже нормально так набегает.
Здравствуйте, Pzz, Вы писали:
Pzz>>>Если ты сервер, тебе могут отлить этого chunked-encoding-а, не спрашивая твоего мнения. CC>>А в чём проблема его реализовать? Даже я в своём наколенном клиенте сделал, исключительно чтоб большие куски данных сливать/заливать на GDrive
Pzz>Да ни в чём. Просто HTTP считается простым текстовым протоколом, который можно реализовать на коленке за вечер. Но со всеми этими "мелочами" уже нормально так набегает.
Пара месяцев на отладку базы, и потом тащить и отлаживать свою реализацию годами. Это если RFC новые не будут выходить. Это реальный план. Оптимистичный — да, зафигачить все за два дня и жить не тужить
Здравствуйте, Marty, Вы писали:
M>Здравствуйте!
M>Есть необходимость встроить в приложуху поддержку HTTP(S). Как клиентскую часть, чтобы пользователь мог заскриптовать обращения к серверу, так и серверную часть, чтобы можно было на коленке забацать сервер.
M>Что посоветуете для этого использовать?
Здравствуйте, bnk, Вы писали:
bnk>Я использовал (давно) Microsoft C++ REST SDK. bnk>https://github.com/microsoft/cpprestsdk
bnk>Хорошо то что без зависимостей
Только от винды )
bnk>Не думаю что для боевых дронов подходит из-за лицензиии.
Здравствуйте, Marty, Вы писали:
bnk>>Я использовал (давно) Microsoft C++ REST SDK. bnk>>https://github.com/microsoft/cpprestsdk
bnk>>Хорошо то что без зависимостей
M>Только от винды )
Нет, он для любых систем (debian, unbuntu, android, osx, windows)
Здравствуйте, so5team, Вы писали:
bnk>>Я использовал (давно) Microsoft C++ REST SDK. bnk>>https://github.com/microsoft/cpprestsdk
S>Он уже не развивается: S>
cpprestsdk is in maintenance mode and we do not recommend its use in new projects. We will continue to fix critical bugs and address security issues.
S>Ну и с производительностью там не ахти. На Linux-ах, говорят, еще хуже, чем под Windows.
Понятно. Ну я давно использовал (когда еще на плюсах писал), больше 7 лет назад наверное.
Здравствуйте, Marty, Вы писали:
M>Пара месяцев на отладку базы
Ты что базой то считаешь что пару месяцев закладываешь?
M> и потом тащить и отлаживать свою реализацию годами.
Это как раз легко и приятно, в отличие от починки багов в чужой реализации.
M> Это если RFC новые не будут выходить.
На базовый HTTP?
Здравствуйте, Marty, Вы писали:
M>1) Можно, но зачем?
В моём случае я юзал WinHTTP но потом в Wine что то сломали и он стал падать где то в TLS коде, а на маке мне тоже надо было юзать, причём надо было чтоб работало уже сейчас, ждать пока починят времени просто не было.
Так что я плюнул, написал свой HTTP client + TLS обёртку и пользуюсь теперь этой конструкцией.
Получилось более гибко и более удобно, ну и работает
M>2) Оно только с конкретным серверным софтом взаимодействует, или готово для всего?
Я первый раз слышу про HTTP client чтоб работал только с конкретным сервером. Базовый набор HTTP работает со всеми промышленными серверами. Это надо что то на сервере сломать чтоб не работало.
Я им тягаю финансовые данные из разных источников, с разных сайтов + гоняю блобы на/с GDrive
За последние лет 5 ещё никаких проблем не было.
Здравствуйте, Marty, Вы писали:
M>утюговый сервер не равен универсальному
А тебе надо чтоб он все новомодные выкрутасы поддерживал или чтоб работал и выдавал что от него надо?
M>С возрастом это приходит, желание перестать ковыряться в говне, а оперировать более масштабными задачами
Только не говори что ты всё ещё достаточно юн чтоб у тебя не прошло желание ковыряться в чужом говне...
Здравствуйте, Marty, Вы писали:
Pzz>>Да ни в чём. Просто HTTP считается простым текстовым протоколом, который можно реализовать на коленке за вечер. Но со всеми этими "мелочами" уже нормально так набегает. M>Пара месяцев на отладку базы, и потом тащить и отлаживать свою реализацию годами. Это если RFC новые не будут выходить.
Задачу поставь внятнее.
Если нужен промышленный HTTPS сервер, который будет держать тысячи соединений с кривыми клиентами и новыми RFC (а что ещё можно отлаживать годами??), бери nginx и пиши к нему плагин. У нас так сервера активации работают: наружу смотрят nginx, обновляемые вместе с серверами, за ними наша логика на С++.
Если нужно отдать страничку диагностики по https, это пишется на коленке за вечер и написать своё простое в этом случае проще, чем копать чужое универсальное.
Qt имеет смысл брать, если Qt уже в проекте. Но, если Qt уже в проекте, то по сторонам, обычно, не смотрят. Или смотрят, когда тормоза Qt достают
N__>https://pocoproject.org/ сам пробовал, довольно удобно
Здравствуйте, so5team, Вы писали:
N__>>https://pocoproject.org/ сам пробовал, довольно удобно S>POCO в списке есть.
Да, я видел, я имел ввиду, что рекомендую его. Про нагрузку правда ничего не могу сказать, в моем случае она была незначительная.
Здравствуйте, Marty, Вы писали:
M>Как представлю мух, седеющих у меня на мониторе, как они, седые, седыми лапками ходят по нему — чот ржать тянет. Не могу асталависта, не могу