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

问题描述 投票:1回答:1

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

我的代码已经在单独的Thread上运行,所以我不需要AsyncWhatever。

建议Android使用HttpURLConnection,因为它是各种轻量级的,但相当于Python的请求是......大。 我看到多个部分(例如预编码的params字符串)解决方案,以及要解决的几个问题。我不是冒险犯错误或忽略自己写的东西,而是问: 是否有这样的包装,request(Method, String, Map<String,String>, Map<String,String>)或类似?

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

android post httpurlconnection
1个回答
1
投票

我想我有适合你的解决方案。有同样的问题(被Node.js request宠坏)并且不喜欢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 for Froyo。

© www.soinside.com 2019 - 2024. All rights reserved.