2012-10-20 90 views
4

我是restlet的新手,並試圖瞭解我應該使用哪種HTTPS客戶端選項。 Android的哪個HTTPS客戶端選項最健壯穩定? 我使用restlet 2.1rc4(和2.1.0)和android 2.2。不幸的是,更改android版本不適合我。其中restlet HTTPS客戶端使用android?

我認爲可能性是:

  1. 的Apache的HttpClient(org.restlet.ext.httpclient)
  2. .NET客戶端(org.restlet.ext.net)
  3. 的Restlet內部客戶

我用org.restlet.ext.net取得了一些成功,它大部分時間工作,但我得到各種例外與「通信錯誤(1001)與消息像」破管「,還有很多情況下立即從...返回一個狀態爲「null(-1)」的客戶端請求,而不向服務器發送請求。也許這是由我們正在使用的舊的android中的錯誤引起的,但我並不確定。

我試圖使用Apache客戶端,但無法獲取HTTPS,因爲它提供了這個異常:java.lang.IllegalStateException:Scheme'https'未註冊。相同的代碼在Windows上使用org.restlet.ext.net.jar的Jave SE版本,但是當我使用同一個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); 
+0

到目前爲止,答案似乎是restlet.ext.net客戶端,因爲其他兩個選擇根本不起作用。但ext.net客戶端經常失敗,我無法使用它。 – user1762069

+0

我們找到了一種方法來(使)ext.net https客戶端在Android 2.2上工作。設置一個像這樣的系統屬性 - System.setProperty(「http.keepAlive」,「false」);我們不必在Android 4.0.3上執行此操作。我從來沒有得到Apache客戶端的工作,但並沒有太努力。 – user1762069

回答

0

新版本2.2 Restlet框架已經在組織改變基於所述HttpURLConnection的其內部HTTP/HTTPS客戶端(先前.restlet.ext.net擴展名)。 org.restlet.jar的大小更穩定,更輕便。