HttpURLConnection的HTTP请求包装器(方法,标头,参数)?

时间:2014-06-26 15:01:52

标签: android post httpurlconnection

被Python宠坏了(例如requests.post(url, data={'p1':'v1','p2':'v2'}, headers={'H1': 'V1'})),我正在寻找在Android上使用的等价物。

我的代码已在不同的主题上运行,所以我不需要AsyncWhatever。

建议Android使用

HttpURLConnection ,因为它是各种轻量级的,但相当于Python的请求...大。

我看到多个部分(例如预编码的params字符串)解决方案,以及要解决的几个问题。我不是冒错误或忽略自己写的东西,而是问: 这样的包装器是否可用,request(Method, String, Map<String,String>, Map<String,String>)或类似的?

我希望这样的解决方案每次调用都需要很少的代码,并且管理所有的怪异(例如pre-Froyo keepAlive hack)本身。

1 个答案:

答案 0 :(得分:1)

我想我有适合你的解决方案。有同样的问题(被Node.js request宠坏了)并且不喜欢&#34;界面&#34; HttpURLConnection

你可以找到一个没有依赖关系的小型库,它以一种不太常见的用例可以通过使用包装的HUC来实现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。