Использование XmlRpc в C++ и Windows
Вопрос
Мне нужно использовать XmlRpc в C++ на платформе Windows.Несмотря на то, что мои друзья уверяют меня, что XmlRpc — это «широкодоступная стандартная технология», для нее доступно не так много библиотек.На самом деле я нашел только одну библиотеку, которая делает это в Windows (плюс еще одну, в которой утверждается, что «вам придется проделать много работы, чтобы скомпилировать ее в Windows»).Библиотекой, которую я нашел, была «XmlRpc++» Криса Морли.Однако он не поддерживает SSL.
Поэтому мой вопрос:какую библиотеку мне следует использовать?
Решение
Я написал свою собственную библиотеку C++.Он доступен на sourceforge:xmlrpcc4win
Причина, по которой я написал это вместо использования Криса Морли, заключалась в следующем:
- Библиотека Windows «wininet.lib» предоставляет вам все функции для обработки Http-запросов, поэтому я бы предпочел использовать ее.В итоге мне понадобилось всего 1700 LOC.
- «wininet.lib» и, следовательно, моя реализация поддерживают HTTPS.
- Использование контейнеров STL Крисом Морли было весьма неэффективным (Крис, напиши мне, если прочитаешь это).
Другие советы
Пока я не написал свою собственную библиотеку (см. выше), вот мой ответ:
В настоящее время библиотека XmlRpc++ Автор: Крис Морли — единственная общедоступная реализация XmlRpc на языке LPGL для C++ в Windows.
Существует несколько реализаций C++ для Linux, каждую из которых можно было бы легко перенести на Windows, но дело в том, что никто еще этого не сделал и не сделал ее общедоступной.Кроме того, как говорит Экзами: «Спецификация XML-RPC довольно проста, и не составит труда реализовать собственный клиент XML-RPC».
Я успешно использую библиотеку Криса Морли, несмотря на то, что мне пришлось найти и исправить немало ошибок.А Справочный форум этот проект вроде бы несколько активен, но никто не исправил эти ошибки и не выпустил новый релиз.Я переписывался с Крисом Морли, и у него были смутные надежды выпустить новый релиз, и он внес свой вклад в этот вопрос stackOverflow (см. ниже/выше), и он утверждает, что исправил большинство ошибок, но до сих пор он этого не сделал. выпустил релиз, исправляющий множество ошибок.Последний выпуск был в 2003 году.
Меня разочаровывает тот факт, что предполагаемый широко поддерживаемый (и простой!) протокол имеет такую плохую поддержку в Windows + C++.Пожалуйста, может кто-нибудь, читающий эту страницу, подхватить эстафету и, например,взять на себя XmlRpc++ или правильно портировать одну из реализаций Linux.
Существуют десятки реализаций XML-RPC. реализации, некоторые на C++, но большинство на других языках.Например, помимо XmlRpc++ существует еще XML-RPC для C и C++.Вот КАК о том, как можно использовать библиотеку XML-RPC для C и C++.
Спецификация XML-RPC довольно проста, и реализовать собственный клиент XML-RPC не составит труда.Не говоря уже о том, что также можно было бы взять существующую реализацию XML-RPC на C и внедрить ее в свой проект на C++.
XML-RPC домашняя страница также предоставляет много полезной информации.
Просто хотел отметить пару моментов:
Исходный код XmlRpc++ в репозитории cvs поддерживает OpenSSL (хотя я его не пробовал, его предоставил другой разработчик).
Большинство обнаруженных ошибок исправлено в cvs;На данный момент у меня нет доступа к Linux-машине, поэтому я не сделал официального релиза.
XmlRpc++ не является общественным достоянием.Оно защищено авторским правом и лицензией (LGPL).
Спасибо, Крис Морли
Мне удалось получить версию xml rpc Тима, работающую с https и с базовой аутентификацией по имени пользователя и паролю.
Для аутентификации:
1) имя пользователя и пароль необходимо передать в функцию InternetConnect(...)
2) заголовок HTTP-запроса «Авторизация:Базовый base64encoded(user:pass)" необходимо добавить перед отправкой команды HttpSendRequest(...).