Apache XML-RPC + BASIC認証 + SSL
XML-RPCをBASIC認証とSSLを経由して利用する。
言語はJava,XML-RPCはApacheのライブラリ(v2.0)を使う。
public class XmpRpcTest { public static void main(String[] args) { try { Vector params = new Vector (); params.addElement ("test_para"); URL url = new URL("https://ssl.host/xmprpc"); XmlRpcTransportFactory tf = new SunSSLTransportFactory(new Properties()); tf.setProperty(XmlRpcTransportFactory.TRANSPORT_AUTH, HttpUtil.encodeBasicAuthentication("id", "password")); tf.setProperty(XmlRpcTransportFactory.TRANSPORT_URL, url); XmlRpcClient xmlrpc = new XmlRpcClient (url, tf); Hashtable result = (Hashtable)xmlrpc.execute("test.get_ID", params); } catch (Exception e) { e.printStackTrace(); } } }
こんなコードを書いたんだが,サーバにコネクトできずタイムアウトで落ちてしまう。うーん。どこかに参考になるドキュメントは無いものかー。
【追記】
アホなことにアクセス先がプロキシー必須のサーバであることを見逃していた。Javaからプロキシー経由でネットワークにアクセスするには,以下のような信じられないコードを書く必要がある。
System.setProperty( "proxySet", "true" ); System.setProperty( "http.proxyHost", "プロキシーのホスト名" ); System.setProperty( "http.proxyPort", "なんか数字" );
プロキシーのクラスがあるわけでもなく,ネットワーク関連のクラスのメソッドでsetProxyHostとかになっているわけでもない。なぜかいきなりシステムプロパティ。どういう実装じゃ。
しかも今回はこれだけでは動かなかった。httpsのプロキシーは別に指定する必要があるのだ!
System.setProperty( "https.proxyHost", "https用プロキシーのホスト名" ); System.setProperty( "https.proxyPort", "なんか数字" );
ふう。