2014-06-26 24 views
1

Python被寵壞了(例如requests.post(url, data={'p1':'v1','p2':'v2'}, headers={'H1': 'V1'})),我正在尋找相當於在Android上使用。HttpURLConnection的HTTP請求包裝(方法,頭文件,參數)?

我的代碼已經在單獨的線程上運行,所以我不需要AsyncWhatever。

HttpURLConnection被推薦用於Android,因爲它是各種輕量級的,但相當於Python的請求是......很大。

我看到多個部分(例如編碼的預PARAMS字符串)的解決方案,以及幾個問題來解決。而不是冒險犯錯誤或忽視的東西寫我自己,我問:
就是這樣的包裝可以則已,一request(Method, String, Map<String,String>, Map<String,String>),或類似的?

我希望這樣的解決方案需要每個呼叫很少的代碼,並管理所有的怪事(如Froyo之前的keepAlive黑客)本身。

回答

1

我想我對你有正確的解決方案。有同樣的問題(由Node.js request寵壞),並不喜歡HttpURLConnection的「接口」。

你可以找到一個小圖書館沒有這不是那麼常見的用例可以通過使用包裝HUC進行實施wrappes HttpURLConnection依賴。它叫做DavidWebb。還有一個鏈接到alternative libraries萬一你錯過了什麼。

與JSON有效載荷和一些頭JSON響應一個典型的POST請求應該是這樣的:

JSONObject postObj = new JSONObject(); 
postObj.put("p1", "v1"); 
postObj.put("p2", "v2"); 

Webb webb = Webb.create(); 
Response<JSONObject> response = webb 
     .post("http://www.example.com/app/myresource") 
     .header("x-date-header", new Date()) 
     .header("x-other-header", "some-text") 
     .body(postObj) 
     .connectTimeout(3000) 
     .asJsonObject(); 

if (response.isSuccess()) { 
    JSONObject outcome = response.getBody(); 

    // ... 

} else { 
    System.out.println(response.getStatusCode()); 
    System.out.println(response.getResponseMessage()); 
    System.out.println(response.getErrorBody()); 
} 

有許多方法來設置Webb例如默認值,並使用或Request對象覆蓋他們。

該庫已經過很好的測試,特別是在Android上,但它沒有特定的代碼或Android API依賴關係,因此您必須自己管理keepAlive的Froyo。

+0

很酷,就是我在找的東西。謝謝。 – kaay