質問

Windows プラットフォーム上で C++ で XmlRpc を使用する必要があります。XmlRpc は「広く利用可能な標準テクノロジ」であると友人が保証しているにもかかわらず、XmlRpc で利用できるライブラリはそれほど多くありません。実際、Windows でこれを行うためのライブラリは 1 つしか見つかりませんでした (さらに、「これを Windows でコンパイルするには多くの作業を行う必要がある」と主張するライブラリももう 1 つありました)。私が見つけたライブラリは Chris Morley の「XmlRpc++」でした。ただし、SSL はサポートされていません。

したがって、私の質問は次のとおりです。どのライブラリを使用すればよいですか?

役に立ちましたか?

解決

私は独自の C++ ライブラリを作成しました。これはsourceforgeで入手できます。xmlrpcc4win

Chris Morley のものを使用せずにこれを書いた理由は次のとおりです。

  • Windows の「wininet.lib」ライブラリには、HTTP リクエストを処理するためのすべての機能が備わっているため、それを使用することをお勧めします。結果的に必要なのは1700LOCだけでした。
  • 「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 実装の 1 つを適切に移植します。

XML-RPC の実装は数十あります。 実装, 、一部は C++ ですが、ほとんどは他の言語です。たとえば、XmlRpc++ 以外にも次のものがあります。 C および C++ 用の XML-RPC. 。がここにあります 方法 XML-RPC for C および C++ ライブラリの使用方法について説明します。

XML-RPC 仕様はいくぶん単純なので、独自の XML-RPC クライアントを実装するのは難しくありません。言うまでもなく、C での既存の XML-RPC 実装を C++ プロジェクトに取り込むことも可能です。

XML-RPC ホームページ 役立つ情報もたくさん提供します。

いくつかの点に注意してください:

  • XmlRpc++ の cvs リポジトリ内のソースは OpenSSL をサポートしています (私は試していませんが、別の開発者によって提供されました)。

  • 報告されたバグのほとんどは CVS で修正されています。現時点では Linux マシンにアクセスできないため、正式リリースは行っていません。

  • XmlRpc++ はパブリックドメインではありません。これは著作権で保護され、ライセンスを受けています (LGPL)。

ありがとう、クリス・モーリー

Tim のバージョンの xml rpc を https および基本的なユーザー名/パスワード認証で動作させることができました。

認証の場合:

1) ユーザー名とパスワードを InternetConnect(...) 関数に渡す必要があります。

2) 「Authorization:」の http リクエスト ヘッダーHttpSendRequest(...) コマンドを送信する前に、Basicbase64encoded(user:pass)」を追加する必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top