Использование XmlRpc в C++ и Windows

Мне нужно использовать XmlRpc в C++ на платформе Windows. Несмотря на то, что мои друзья уверяют меня, что XmlRpc является «широко доступной стандартной технологией», для него доступно не так много библиотек. На самом деле я нашел только одну библиотеку для этого в Windows (плюс еще одна, в которой утверждается, что «вам придется проделать много работы, чтобы это скомпилировалось в Windows). Я нашел библиотеку« XmlRpC++ »Криса Морли. Однако он не поддерживает SSL.

Поэтому у меня вопрос: какую библиотеку мне следует использовать?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
7
0
8 800
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Существуют десятки реализаций XML-RPC реализации, некоторые на C++, но большинство на других языках. Например, помимо XmlRpC++ существует еще XML-RPC для C и C++. Вот КАК о том, как можно использовать библиотеки XML-RPC для C и C++.

Спецификация XML-RPC довольно проста, и реализовать собственный клиент XML-RPC не составит труда. Не говоря уже о том, что можно было бы также взять существующую реализацию XML-RPC на C и перенести в свой проект на C++.

XML-RPC домашняя страница также предоставляет много полезной информации.

Библиотека «XML-RPC для C и C++» не работает в Windows - я цитирую: «... но факт в том, что она, вероятно, не будет работать прямо из коробки в вашей системе Windows». Это означает, что есть только одна библиотека для C++, которая работает в Windows, то есть библиотека Криса Морли, и у нее нет поддержки SSL.

Tim Cooper 23.09.2008 05:49

Пока я не написал свою собственную библиотеку (см. Выше), вот мой ответ:

В настоящее время Библиотека XmlRpC++ Криса Морли является единственной реализацией XmlRpc открытого домена / LPGL для C++ в Windows.

Существует несколько реализаций C++ для Linux, любую из которых предположительно можно легко перенести на Windows, но, похоже, никто еще не сделал этого и не сделал его общедоступным. Кроме того, как говорит Экзэми: «Спецификация XML-RPC довольно проста, и реализовать собственный клиент XML-RPC не составит труда».

Я успешно использую библиотеку Криса Морли, несмотря на то, что мне пришлось найти и исправить довольно много ошибок. Справочный форум для этого проекта кажется активным, но никто не исправил эти ошибки и не выпустил новый выпуск. Я переписывался с Крисом Морли, и у него были смутные надежды на выпуск нового релиза, и он внес свой вклад в этот вопрос о stackOverflow (см. Ниже / выше), и он утверждает, что исправил большинство ошибок, но пока он не сделал релиз, в котором исправлено множество ошибок. Последний выпуск был в 2003 году.

Меня разочаровывает то, что предполагаемый широко поддерживаемый (и простой!) Протокол имеет такую ​​плохую поддержку в Windows + C++. Кто-нибудь, читающий эту страницу, может принять эстафету и, например, взять на себя XmlRpC++ или правильно портировать одну из реализаций Linux.

Сразу хотел отметить пару моментов:

  • Исходный код в репозитории cvs для XmlRpC++ поддерживает OpenSSL (хотя я его не пробовал, он был предоставлен другим разработчиком).

  • Большинство обнаруженных ошибок исправлено в cvs; На данный момент у меня нет доступа к Linux-машине, поэтому я не выпускал официального релиза.

  • XmlRpC++ не является общественным достоянием. Он защищен авторским правом и лицензирован (LGPL).

Спасибо, Крис Морли

Ответ принят как подходящий

Я написал свою собственную библиотеку C++. Он доступен на sourceforge: xmlrpcc4win

Причина, по которой я написал его, а не использовал Криса Морли, заключалась в следующем:

  • Библиотека Windows wininet.lib предоставляет вам все функции для обработки запросов Http, поэтому я бы предпочел ее использовать. В результате мне понадобилось всего 1700 LOC.
  • "wininet.lib" и, следовательно, моя реализация, поддерживает HTTPS.
  • Использование Крисом Морли контейнеров STL было довольно неэффективным (Крис, напишите мне, если вы читаете это).

Спасибо за это, я попробую. Я должен признать, что меня довольно пугает эта часть файла TimXmlRpc.cpp: #define not! #define или || #define и &&

Roel 27.01.2010 14:14

Небольшое обновление, я с большим успехом использую эту библиотеку, и ее было очень легко реализовать. Настоятельно рекомендуется всем, кому нужен XmlRpc в Windows.

Roel 12.02.2010 18:31

@TimCooper Поддерживает ли он какой-либо способ делать несинхронизированные вызовы xmlrpc?

Pit Digger 31.12.2012 19:55

Я только что попробовал «XmlRpc C++ для Windows» Тима с Infusionsoft, и, черт возьми, он работает! Однако следует обратить пристальное внимание на то, как Infusionsoft размещает структуры внутри массивов.

Pierre 03.10.2013 04:04

Спасибо, что поделились своей библиотекой! Однако, похоже, он не поддерживает Unicode. Кодировка не указана в теге XML (следовательно, по умолчанию используется UTF8). Затем клиентская программа должна преобразовать строки в / из UTF8 перед передачей в библиотеку. Не очень удобно. Также не компилируется Release-версия проекта. Думаю, это не большая проблема, поскольку мы используем только исходный код (а не проект). Также существуют вызовы strcpy / sprintf, которые могут вызвать переполнение буфера.

Serge Wautier 17.06.2015 15:50

Мне удалось получить версию xml rpc Тима, работающую с https и с базовой аутентификацией по имени пользователя и паролю.

Для аутентификации:

1) имя пользователя и пароль необходимо передать в функцию InternetConnect (...)

2) перед отправкой команды HttpSendRequest (...) необходимо добавить заголовок HTTP-запроса «Авторизация: базовая кодировка base64 (пользователь: пароль)».

вы можете прислать мне ваш измененный исходный код? Я просмотрю, а затем выложу в версию sourceforge. Вы можете связаться со мной по адресу [email protected]

Tim Cooper 09.02.2013 03:54

Другие вопросы по теме