我正在使用以下代码建立http连接:
HttpClient client = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(url);
HttpResponse response = client.execute(httpPost);
我想从响应对象中读取一个bytearray。
我该怎么做?
答案 0 :(得分:5)
您可以使用以下方法直接读取字节数组: EntityUtils.toByteArray
示例
HttpClient client = new DefaultHttpClient();
HttpGet get = new HttpGet("localhost:8080/myurl");
HttpResponse response = client.execute(get);
byte[] content = EntityUtils.toByteArray(response.getEntity());
答案 1 :(得分:1)
您可以使用:
HttpResponse response = client.execute(httpPost);
String content = EntityUtils.toString(response.getEntity());
byte[] bytes = content.getBytes("UTF8");
您可以使用适合响应的字符编码替换。
答案 2 :(得分:0)
我做了一些与此非常相似的事情,但不久之前。
查看我使用的源代码
HttpClient client = new DefaultHttpClient();
String url = "http://192.168.1.69:8888/sdroidmarshal";
HttpGet getRequest = new HttpGet(url);
ResponseHandler<String> responseHandler = new BasicResponseHandler();
String proto = client.execute(getRequest, responseHandler);
我非常肯定ResponseHandler是关键。我的get请求只返回了我需要的字符串,这非常简单。
在bytearray的情况下,你可能想要使用像这样的InputStream
ResponseHandler<InputStream> responseHandler = new BasicResponseHandler();
InputStream in = client.execute(getRequest, responseHandler);
之后只需正常处理InputStream。
一些谷歌搜索建议你可能还需要使用HttpResponseHandler()而不是BasicResponseHandler(),就像我的例子中一样,我是小提琴。
我的工作的完整源代码是here,它可能对您有所帮助。
答案 3 :(得分:0)
Kotlin 方式
在后台线程的异步任务上运行这个,否则它会通过网络任务在主线程上运行的错误
doAsync {
val client: HttpClient = DefaultHttpClient()
val get = HttpPost("*your url*")
get.setHeader("Authorization","Bearer "+Utils.token)
val response: HttpResponse = client.execute(get)
val content = EntityUtils.toByteArray(response.getEntity())
onComplete {
createPdf(content)
}
}