在 C++ 和 Windows 中使用 XmlRpc
题
我需要在 Windows 平台上使用 C++ 中的 XmlRpc。尽管我的朋友向我保证 XmlRpc 是一种“广泛可用的标准技术”,但可用的库并不多。事实上,我只找到一个库可以在 Windows 上执行此操作(另外一个库声称“您必须做很多工作才能在 Windows 上编译它”)。我找到的库是 Chris Morley 的“XmlRpc++”。但是,它不支持 SSL。
因此我的问题是:我应该使用什么库?
解决方案
我已经编写了自己的 C++ 库。它可以在 sourceforge 上找到:xmlrpcc4win
我写它而不是使用 Chris Morley 的原因是:
- Windows“wininet.lib”库为您提供了处理 Http 请求的所有功能,因此我宁愿使用它。结果我只需要1700 LOC。
- “wininet.lib”,因此我的实现支持 HTTPS
- Chris Morley 对 STL 容器的使用效率相当低(Chris,如果你读过这篇文章,请给我发邮件)。
其他提示
在我编写自己的库之前,(见上文)这是我的答案:
目前, XmlRpc++ 库 作者 Chris Morley 是 Windows 上 C++ 的唯一公共域/LPGL XmlRpc 实现。
Linux 有几个 C++ 实现,其中任何一个都可以很容易地移植到 Windows,但事实似乎是还没有人这样做并将其公开可用。另外,正如 eczamy 所说,“XML-RPC 规范有些简单,实现您自己的 XML-RPC 客户端并不困难。”
尽管必须找到并修复相当多的错误,但我正在成功使用 Chris Morley 的库。这 帮助论坛 对于这个项目似乎有些活跃,但没有人修复这些错误并完成新版本。我一直在与 Chris Morley 通信,他模糊地希望发布一个新版本,他对这个 stackOverflow 问题做出了贡献(见下文/上文),他声称已经修复了大部分错误,但到目前为止他还没有发布了一个修复了许多错误的版本。最后一次发布是在 2003 年。
令我失望的是,一个被认为得到广泛支持(而且简单!)的协议在 Windows + C++ 上的支持却如此糟糕。请阅读此页的人拿起接力棒,例如:接管 XmlRpc++ 或正确移植 Linux 实现之一。
XML-RPC 有数十种实现 实施, ,有些是 C++ 语言,但大多数是其他语言。例如,除了XmlRpc++之外,还有 用于 C 和 C++ 的 XML-RPC. 。这里有一个 如何 关于如何使用 C 和 C++ 库的 XML-RPC。
XML-RPC 规范有些简单,实现您自己的 XML-RPC 客户端并不困难。更不用说,还可以采用 C 语言中的现有 XML-RPC 实现并将其引入您的 C++ 项目中。
XML-RPC 主页 还提供了很多有用的信息。
只是想注意几点:
XmlRpc++ 的 cvs 存储库中的源代码支持 OpenSSL(虽然我还没有尝试过,但它是由另一位开发人员贡献的)。
大多数报告的错误都在 cvs 中修复;我目前无法访问Linux机器,所以我还没有发布正式版本。
XmlRpc++ 不是公共领域。它受版权保护并获得许可 (LGPL)。
谢谢,克里斯·莫利
我能够让 Tim 的 xml rpc 版本与 https 一起使用并使用基本的用户名/密码身份验证。
对于身份验证:
1)用户名和密码需要传递给InternetConnect(...)函数
2) http请求头“Authorization:在发送 HttpSendRequest(...) 命令之前需要添加基本的 base64encoded(user:pass)”。