Вопрос

Мне нужно использовать 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(...).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top