私はrestletを初めて使用し、Androidで使用する必要があるHTTPSクライアントオプションを理解しようとしています。Android で最も堅牢で安定している HTTPS クライアント オプションはどれですか? 私はrestlet 2.1rc4(および2.1.0)とandroid 2.2を使用しています。残念ながら、Android のバージョンを変更することはできません。
可能性は次のとおりだと思います。
- Apache HttpClient (org.restlet.ext.httpclient)
- .net クライアント (org.restlet.ext.net)
- Restlet 内部クライアント
私は org.restlet.ext.net である程度の成功を収めました。ほとんどの場合は機能しますが、「壊れたパイプ」などのメッセージを含む「通信エラー (1001)」でさまざまな例外が発生し、多くの場合、サーバーにリクエストを送信することなく、ステータスが「null (-1)」のクライアント リクエスト.おそらくこれは、使用している古い Android のバグが原因である可能性がありますが、よくわかりません.
Apache クライアントを使用しようとしましたが、次の例外が発生するため、HTTPS をまったく機能させることができません: java.lang.IllegalStateException: スキーム 'https' が登録されていません。同じコードは org.restlet.ext.net.jar の Jave SE エディションを使用して Windows で動作しますが、同じ jar ファイルの Android バージョンを使用すると、https が登録されていないと表示されます。Apache クライアントは Android で HTTPS をサポートしていると思っていましたが、うまくいきません。
内部クライアントも試しましたが、それもまったく機能しません。Android RESTLet SSL Null Pointerと同じ 1001 エラーの問題が発生します。私はrestlet 2.1.0とandroid 2.2でこれを試しました。
私のソースコードは基本的に次のようなものです(Apacheクライアントを使用しようとする試みを示しています):
context = new org.restlet.Context();
Engine.getInstance().getRegisteredConverters().add(new JacksonConverter());
Engine.getInstance().getRegisteredClients().add(new org.restlet.ext.httpclient.HttpClientHelper(null));
client = new org.restlet.Client(context, org.restlet.data.Protocol.HTTPS);
context.setClientDispatcher(client);
ClientResource resource = new ClientResource(context, url);
resource.setEntityBuffering(true);
PojoResult result = resource.post(new PojoRequest, PojoResult.class);