Здравствуйте, jedi, Вы писали:
J>Привет всем,
J>поиск здесь и по гуглю ничего внятного не дал. Посему решил провести небольгой соцопрос J>Кто чем пользуется для работы с HTTP в своих приложениях?
J>Что нужно: возможность выполнения асинхронных запросов, возможность отмены, показ прогресса (или легкая воможность прикрутить оный). J>Основное требование — высокоуровневость и простота использования, вместе с тем достаточная гибкость и возможность тонкой настройки.
J>Всем сасибо.
можно посмотреть MSXML4::IXMLHTTPRequest/IServerXMLHTTPRequest2
Еще раз уточню. Передо мной не стоит задача единоразово сделать какой-то HTTP запрос. Это в текущем приложении сделано (с помощью WinInet) — и благополучно сдано заказчику. Так есть опыт использования cURL.
Но! По ряду причин ни одно из решений, которые я использовал ранее, мне не нравятся.
Ключевые требования:
а) Кроссплатформенность. В разумных пределах. По крайней мере винда, линух, мак.
б) Продуманный С++ интерфейс, не слишком замороченный и без страшных compile-time наворотов — вдруг придется
портировать на убогую (в смысле хорошего наличия С++ компилятора) платформу
в) Удобный высокоуровневый интерфейс, не скрывающий тем не менее низкоуровневых деталей (escape hatches)
г) Возможность полноценной работы в асинхронном режиме со всеми вытекающими — прогресс, отмена на любой стадии итп
д) Поддержка HTTPS/прокси/кукисов — опционально
е) Не тянущее за собой не связанных с задачей библиотек (или тянущее по минимуму)
Я понимаю, что хочу многого , но и решение ищется не на 1 день.
Возможно меня бы устроило что-то на базе ACE.
В общем, есть 100% уверенность что нечто подобное в природе существует. Не может не существовать.
Ау, где ты библиотека моей мечты???
поиск здесь и по гуглю ничего внятного не дал. Посему решил провести небольгой соцопрос
Кто чем пользуется для работы с HTTP в своих приложениях?
Что нужно: возможность выполнения асинхронных запросов, возможность отмены, показ прогресса (или легкая воможность прикрутить оный).
Основное требование — высокоуровневость и простота использования, вместе с тем достаточная гибкость и возможность тонкой настройки.
Здравствуйте, astral_marine, Вы писали:
_>Посмотрите: _>- Встраевыемый Internet Explorer в окно, как ActiveX _>- WinInet functions _>- cURL
_>Остальной пользовательский интерфейс пишется самостоятельно
cURL по определенным причинам использовать не могу — иначе бы не спрашивал).
Internet Explorer мне не нужен, явный оверкилл, мне просто GET запрос сделать надо.
А ты реально пробовал WinInet использовать в асинхронном режиме или просто так сказал?
Здравствуйте, jedi, Вы писали:
J>Что нужно: возможность выполнения асинхронных запросов, возможность отмены, показ прогресса (или легкая воможность прикрутить оный). J>Основное требование — высокоуровневость и простота использования, вместе с тем достаточная гибкость и возможность тонкой настройки.
Под "показом прогресса" понимается не ГУЙ с прогресс баром), а просто какой-то колбек позволяюший самому такой гуй прикрутить. А то тут меня уже неправильно поняли.
P.S. Я не совсем ламер, так что не нужно ответов типа кури WinInet, cURL итп. Мне просто интересно кто что использует — достаточно
высокоуровневое, стабильное, настраиваемое, написанное в С++ стиле.
Здравствуйте, jedi, Вы писали:
J>Кто чем пользуется для работы с HTTP в своих приложениях?
Я в ближайшее время планирую попробовать соответствующие классы из wxWidgets. По описанию выглядит довольно неплохо.
Здравствуйте, Slava Tutushkin, Вы писали:
ST>Здравствуйте, jedi, Вы писали:
J>>Кто чем пользуется для работы с HTTP в своих приложениях? ST>Я в ближайшее время планирую попробовать соответствующие классы из wxWidgets. По описанию выглядит довольно неплохо.
Уже ближе к делу). Смотрел некоторое время назад. Нет (или не понял как) возможности асинхронной работы — те запустить например десяток одновременных даунлоадов в одном потоке.
Но все равно спасибо , посмотрю мож че в последней версии изменилось.
Здравствуйте, jedi, Вы писали:
J>Под "показом прогресса" понимается не ГУЙ с прогресс баром), а просто какой-то колбек позволяюший самому такой гуй прикрутить. А то тут меня уже неправильно поняли.
Ну тогда это URLDownloadToFile, URLOpenStream и прочие URL моникеры.
Здравствуйте, Константин Л., Вы писали:
КЛ>можно посмотреть MSXML4::IXMLHTTPRequest/IServerXMLHTTPRequest2
КЛ>асинхронность есть, мониторинга прогресса нету
Спасибо, посмотрю. Правда смущает, то что уж очень микрософто-зависимо — сейчас это не важно, но есть перспектива переноса проги под линух и мак.
Так что забыл еще одно требование — кроссплатформенность между основными платформами (палмы и симбианы не важны
Здравствуйте, algol, Вы писали:
A>Здравствуйте, jedi, Вы писали:
J>>Под "показом прогресса" понимается не ГУЙ с прогресс баром), а просто какой-то колбек позволяюший самому такой гуй прикрутить. А то тут меня уже неправильно поняли.
A>Ну тогда это URLDownloadToFile, URLOpenStream и прочие URL моникеры.
Интересно, но не в кассу. Мне нужна гибкость, те возможность задания хидеров итп. Слишком высокоуровнево
Да и не кроссплатформенно.
Понимаю, что я привередливый. Но ведь есть где-то же библиотека моей мечты неужели до сих пор на С++ ничего подобного не написано?
Здравствуйте, jedi, Вы писали:
J>Internet Explorer мне не нужен, явный оверкилл, мне просто GET запрос сделать надо.
Ну так и послать GET и жлать ответа или прибить ожидание когда уже не надо ждать
Некроссплатформенность маловероятна (c) Sheridan
...трава никак не влияет, разве что срывает покровы барьеров... (с) мыщъх
Здравствуйте, olexandr, Вы писали:
J>>Internet Explorer мне не нужен, явный оверкилл, мне просто GET запрос сделать надо. O>Ну так и послать GET и жлать ответа или прибить ожидание когда уже не надо ждать
В-первых не кроссплатформенно, как я уже уточнил. Но это не самое страшное.
Internet Explorer имеет кучу недостаков:
а) он может просто не стоять у пользователя
б) я завишу от его настроек — прокси, сертификаты итп. Понятно, что все настраивается, но это может затронуть другие приложения.
в) это ОВЕРКИЛЛ. мне не нужен броузер, мне нужно выполнить простой GET запрос с возможностью отследить прогресс и отменить в случае необходимости.
г) это не стандартный С++, а COM со всеми вытекающими.
Если бы мне нужен был IE я бы взял его и использовал бы, не создавая этого топика
Здравствуйте, Сергей, Вы писали:
С>В Qt что-то такое должно быть. Но Qt стоит денег.
Да, наверное есть. Но тут тоже проблема — я буду вынужден таскать за собой (и покупать) QT. Сомневаюсь, что это библиотеку отделно от него можно использовать. Все равно спасибо — еще одна версия в копилку
Здравствуйте, jedi, Вы писали:
A>>Ну тогда это URLDownloadToFile, URLOpenStream и прочие URL моникеры. J>Интересно, но не в кассу. Мне нужна гибкость, те возможность задания хидеров итп. Слишком высокоуровнево
С хидерами нет проблем — IHttpNegotiate::BeginningTransaction, и все остальное тоже делается.
J>Да и не кроссплатформенно.
Здравствуйте, jedi, Вы писали:
J>>>Кто чем пользуется для работы с HTTP в своих приложениях? ST>>Я в ближайшее время планирую попробовать соответствующие классы из wxWidgets. По описанию выглядит довольно неплохо. J>Уже ближе к делу). Смотрел некоторое время назад. Нет (или не понял как) возможности асинхронной работы — те запустить например десяток одновременных даунлоадов в одном потоке.
Это ещё надо посмотреть, как оно работает, кстати.
Вопрос в том, как ведёт себя GetInputStream из wxHTTP. Я фантазирую, что оно сразу возвращает управление, а потом, при необходимости, блокируется при чтении из возвращённого потока.
Эти фантазии имеют под собой кое-какую основу: у wxInputStream есть метод CanRead, который, в соответствии с документацией, сообщает, будет ли блок при вызове Read.
В общем, при первом взгляде на документацию, всё выглядит асинхронным.
Здравствуйте, Slava Tutushkin, Вы писали:
ST>Здравствуйте, jedi, Вы писали:
ST>Эти фантазии имеют под собой кое-какую основу: у wxInputStream есть метод CanRead, который, в соответствии с документацией, сообщает, будет ли блок при вызове Read.
Это не асинхронность Что мне это CanRead в цикле вызывать? Или Sleep делать?
Нужны уведомления (те вызов колбека) и/или (даже лучше) что-то похожее на ACE-совский Reactor.
Здравствуйте, jedi, Вы писали:
ST>>Эти фантазии имеют под собой кое-какую основу: у wxInputStream есть метод CanRead, который, в соответствии с документацией, сообщает, будет ли блок при вызове Read. J>Это не асинхронность Что мне это CanRead в цикле вызывать? Или Sleep делать? J>Нужны уведомления (те вызов колбека) и/или (даже лучше) что-то похожее на ACE-совский Reactor.
Ооокей, а ещё есть вот такое:
wxSocket events
wxSOCKET_INPUT There is data available for reading.
wxSOCKET_OUTPUT The socket is ready to be written to.
wxSOCKET_CONNECTION Incoming connection request (server), or successful connection establishment (client).
wxSOCKET_LOST The connection has been closed.
ST>wxSocket events
ST>wxSOCKET_INPUT There is data available for reading.
ST>wxSOCKET_OUTPUT The socket is ready to be written to.
ST>wxSOCKET_CONNECTION Incoming connection request (server), or successful connection establishment (client).
ST>wxSOCKET_LOST The connection has been closed.
ST>
ST>В общем, всё равно всё хорошо.
Неа (вредный я)... Это я должен на уровень сокетов спуститься. Если так то нафига мне вообще специальный HTTP класс? Я могу и руками по HTTP общаться, вот только геморно это. Да и как быть с тем же HTTPS? А с асинхронной отсылкой запроса или приемом респонз хидеров? А с резолвингом днс перед подключением, а с самим подключением? — то что ты показал будет работать только во время приема Response stream-а.
В общем полумеры не нужны, интересует ultimate solution
Здравствуйте, jedi, Вы писали:
ST>>В общем, всё равно всё хорошо. J>Неа (вредный я)... Это я должен на уровень сокетов спуститься. Если так то нафига мне вообще специальный HTTP класс? Я могу и руками по HTTP общаться, вот только геморно это. Да и как быть с тем же HTTPS? А с асинхронной отсылкой запроса или приемом респонз хидеров? А с резолвингом днс перед подключением, а с самим подключением? — то что ты показал будет работать только во время приема Response stream-а. J>В общем полумеры не нужны, интересует ultimate solution
Осталось только сказать, что wxHTTP унаследован от wxSocketBase, у которого и есть перечисленные эвенты.
Но, в общем, вредность понятна, да. Я тоже хочу нормальный высокоуровневый, но сильно гибкий HTTP.
Здравствуйте, jedi, Вы писали:
J>Еще раз уточню. Передо мной не стоит задача единоразово сделать какой-то HTTP запрос. Это в текущем приложении сделано (с помощью WinInet) — и благополучно сдано заказчику. Так есть опыт использования cURL.
А можно понтересоваться почему нельзя использовать libcurl? В ней есть все запрашиваемые функции. Имхо альтернатива только писать самому на сокетах (ну, еще есть libwww, хотя мне она совсем не нравится)
Здравствуйте, jedi, Вы писали:
J>Здравствуйте, olexandr, Вы писали:
J>>>Internet Explorer мне не нужен, явный оверкилл, мне просто GET запрос сделать надо. O>>Ну так и послать GET и жлать ответа или прибить ожидание когда уже не надо ждать
J>В-первых не кроссплатформенно, как я уже уточнил. Но это не самое страшное.
J>Internet Explorer имеет кучу недостаков: J>а) он может просто не стоять у пользователя J>б) я завишу от его настроек — прокси, сертификаты итп. Понятно, что все настраивается, но это может затронуть другие приложения. J>в) это ОВЕРКИЛЛ. мне не нужен броузер, мне нужно выполнить простой GET запрос с возможностью отследить прогресс и отменить в случае необходимости. J>г) это не стандартный С++, а COM со всеми вытекающими.
J>Если бы мне нужен был IE я бы взял его и использовал бы, не создавая этого топика
Вы меня не поняли, я имел в виду "взять и самому послать GET напрямую", то есть ручками сформировать этот запрос и отправить его.
J>Все равно спасибо за высказанное мнение
Некроссплатформенность маловероятна (c) Sheridan
...трава никак не влияет, разве что срывает покровы барьеров... (с) мыщъх
Здравствуйте, Conr, Вы писали:
C>Здравствуйте, jedi, Вы писали:
J>>Еще раз уточню. Передо мной не стоит задача единоразово сделать какой-то HTTP запрос. Это в текущем приложении сделано (с помощью WinInet) — и благополучно сдано заказчику. Так есть опыт использования cURL. C>А можно понтересоваться почему нельзя использовать libcurl? В ней есть все запрашиваемые функции. Имхо альтернатива только писать самому на сокетах (ну, еще есть libwww, хотя мне она совсем не нравится)
Да в общем-то на ней скорее всего и остановлюсь (в последнем проекте нельзя было использовать из соображений мимнимальности екзешника,
поэтому выбора не было — только WinInet). Но вот чего-то она мне не по вкусу , да и не С++. Из готовых врапперов юзал cURLpp, но тогда он был пожалуй сыроват, да и в целом оставил ощущение недоделанности.
Конечно можно плюнуть на все и написать свою либу (или свой враппер для cURL), но к необоснованному велосипедостроительству отношусь крайне отрицательно . Да и — а вдруг повезет и найдется что-то готовое, юзают же что-то люди , не верю что все сови врапперы пишут.
P.S. Насчет libwww солидарен — смотрел года два назад, впечатление — полное гуано .
Здравствуйте, olexandr, Вы писали:
O>Вы меня не поняли, я имел в виду "взять и самому послать GET напрямую", то есть ручками сформировать этот запрос и отправить его.
А зачем вы используете CreateFile/fopen/fstream.open()/чтоещетам, а не работаете на прямую с файловой системой/секторами диска в машинных кодах/на ассемблере?
А если серьезно — слишком сложный HTTP протокол, чтобы его каждый раз ручками имплементить/плодить баги.
Здравствуйте, jedi, Вы писали:
J>Да, наверное есть. Но тут тоже проблема — я буду вынужден таскать за собой (и покупать) QT. Сомневаюсь, что это библиотеку отделно от него можно использовать. Все равно спасибо — еще одна версия в копилку
В последних версия Qt, насколько мне известно, перестала быть кросс-платформенным GUI-фреймворком, а стала просто кросс-платформенным фреймворком — ребята из trolltech разделили все на набор независимых друг от друга библиотек. А кроме того, применимость для вашей задачи можно оценить, скачав GPL-версию — теперь она есть и под Windows.
Здравствуйте, Сергей, Вы писали:
С>В последних версия Qt, насколько мне известно, перестала быть кросс-платформенным GUI-фреймворком, а стала просто кросс-платформенным фреймворком — ребята из trolltech разделили все на набор независимых друг от друга библиотек. А кроме того, применимость для вашей задачи можно оценить, скачав GPL-версию — теперь она есть и под Windows.
Спасибо за информацию, посмотрю. Насчет задачи — я ниже в ветке написал
J>Да в общем-то на ней скорее всего и остановлюсь (в последнем проекте нельзя было использовать из соображений мимнимальности екзешника, J>поэтому выбора не было — только WinInet). Но вот чего-то она мне не по вкусу , да и не С++. Из готовых врапперов юзал cURLpp, но тогда он был пожалуй сыроват, да и в целом оставил ощущение недоделанности.
curlpp мне тоже не понравилась
J>Конечно можно плюнуть на все и написать свою либу (или свой враппер для cURL), но к необоснованному велосипедостроительству отношусь крайне отрицательно . Да и — а вдруг повезет и найдется что-то готовое, юзают же что-то люди , не верю что все сови врапперы пишут.
Я в свое время остановился именно на этом варианте, то есть свой C++ враппер для libcurl, потому как ничего что бы меня устроило, не нашел. А вот к работе именно libcurl никаких серьезных нареканий у меня нет
Здравствуйте, Conr, Вы писали:
C>Я в свое время остановился именно на этом варианте, то есть свой C++ враппер для libcurl, потому как ничего что бы меня устроило, не нашел. А вот к работе именно libcurl никаких серьезных нареканий у меня нет
Спасибо . ну что ж, подождем может еще чего присоветует, а нет так — и правда займусь велосипедом
jedi wrote:
> Но! По ряду причин ни одно из решений, которые я использовал ранее, мне > не нравятся.
Взгляни на всякий случай на libxml/nanohttp, вдруг понравится. Хотя, как я представляю, кроме того, что маленький размер
— никаких преимуществ перед libcurl нет.
Posted via RSDN NNTP Server 2.0
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Мдя, очень печальные итоги опроса. ИМХО, очень четко проявились проблемы современного С++ — бесконечная удаленность от практического программирования. Посмотите в мир Java — подобный топик в их форуме вызвал бы смех: куча бесплатных библиотек, приятный выбор.
Из-за острой нехватки библиотек промышленного уровня решать задачи на С++ становится все труднее и труднее ... Печально это
Здравствуйте, jedi, Вы писали:
J>Мдя, очень печальные итоги опроса. ИМХО, очень четко проявились проблемы современного С++ — бесконечная удаленность от практического программирования. Посмотите в мир Java — подобный топик в их форуме вызвал бы смех: куча бесплатных библиотек, приятный выбор.
Позволю себе не согласиться. Практическое программирование в моем понимании все же программирование платное. А выбор платных библиотек для данной задачи весьма широк. В крайнем случае более-менее грамотный разработчик с этой задачей без особых проблем расправится за пару недель, что в принципе сравномо с ценой библиотеки. Хотя это только в данном конкретном случае. Обычно все же дешевле купить. Плюс нужно учитывать, что покупая библиотеку, одновременно получаешь и поддержку, то есть время вникания в нее сокращается, часто весьма значительно.
J>Из-за острой нехватки библиотек промышленного уровня решать задачи на С++ становится все труднее и труднее ... Печально это
Как это решение может стать труднее чем раньше? Раньше ж этих библиотек тоже не было, проще от этого не становилось. Другое дело, если сами задачи становятся сложнее, но и в этом случае я не вижу ничего страшного.
Здравствуйте, jedi, Вы писали:
J>Мдя, очень печальные итоги опроса. ИМХО, очень четко проявились проблемы современного С++ — бесконечная удаленность от практического программирования. Посмотите в мир Java — подобный топик в их форуме вызвал бы смех: куча бесплатных библиотек, приятный выбор.
куча бесплатного есть в cURL comparison. Смотрели ?
J>Из-за острой нехватки библиотек промышленного уровня решать задачи на С++ становится все труднее и труднее ... Печально это
Здравствуйте, Константин Л., Вы писали:
КЛ>можно посмотреть MSXML4::IXMLHTTPRequest/IServerXMLHTTPRequest2 КЛ>асинхронность есть, мониторинга прогресса нету
Мониторинг есть, см. XMLDOMDocumentEvents.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Курица — это инструмент, с помощью которого одно яйцо производит другие.
Здравствуйте, frogkiller, Вы писали:
F>Здравствуйте, Константин Л., Вы писали:
КЛ>>можно посмотреть MSXML4::IXMLHTTPRequest/IServerXMLHTTPRequest2 КЛ>>асинхронность есть, мониторинга прогресса нету
F>Мониторинг есть, см. XMLDOMDocumentEvents.
хм...Под мониторингом понималась возможность узнать сколько байт скачалось. Про readyState я знаю, но это, в моем понимании, не совсем то
Здравствуйте, Константин Л., Вы писали:
КЛ>хм...Под мониторингом понималась возможность узнать сколько байт скачалось. Про readyState я знаю, но это, в моем понимании, не совсем то
В таком варианте согласен
Есть забавная модификация XMLHTTPRequest'а от Mozilla
Здесь в чистом виде то, что нужно, но
nsIJSXMLHttpRequest... Warning: This interface must only be used from JavaScript code, rather than from native code.
Конечно, есть исходники, но имхо быстрее будет самому написать обёртку для каждой целевой платформы из имеющихся.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Курица — это инструмент, с помощью которого одно яйцо производит другие.
Здравствуйте, frogkiller, Вы писали:
F>Здравствуйте, Константин Л., Вы писали:
КЛ>>хм...Под мониторингом понималась возможность узнать сколько байт скачалось. Про readyState я знаю, но это, в моем понимании, не совсем то
F>В таком варианте согласен
F>Есть забавная модификация XMLHTTPRequest'а от Mozilla
Здравствуйте, Константин Л., Вы писали:
F>>Есть забавная модификация XMLHTTPRequest'а от Mozilla КЛ>Смотрю, они не только COM своровали
Почему сразу своровали? позаимствовали удачное технологическое решение.
И хотя мне лично COM не очень нравится, надо признать, что для очень большего числа относительно простых разработок он сильно облегчает жизнь. Так сказать, проверка практикой показала актуальность.
К тому же, видишь, уже что-то полезное они прикрутили от себя.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Курица — это инструмент, с помощью которого одно яйцо производит другие.