被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)本身。
答案 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。