httpclient处理返回数据
目的
见另一篇博客代码需求
https://blog.csdn.net/GY325416/article/details/81412078
处理返回数据
使用httpclient请求过后,返回的数据(在对象CloseableHttpResponse里面)如何处理,如何返回到前台页面?
我们只需将CloseableHttpResponse对象数据取出放到HttpServletResponse对象即可,如下
/**
* 处理返回文件
*
* @param response 前台页面的响应
* @param closeableHttpResponse httpclient请求过后返回数据
* @author piper
* @data 2018/7/3 10:56
*/
public void fileHandle(HttpServletResponse response, CloseableHttpResponse closeableHttpResponse) {
ServletOutputStream out = null;
try {
Header encode = closeableHttpResponse.getFirstHeader("Content-Type"); //请求头,要返回content-type,以便前台知道如何处理
response.setHeader(encode.getName(), encode.getValue());
HttpEntity entity = closeableHttpResponse.getEntity(); //取出返回体
out = response.getOutputStream(); 得到给前台的响应流
entity.writeTo(out); //将返回体通过响应流写到前台
out.flush();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (out != null) {
out.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
如果要在返回前台之前对数据(比如js,html文件)做一些处理,可以这样做
/**
* 处理html
*
* @param response 前台页面的响应
* @param closeableHttpResponse httpclient请求过后返回数据
* @author piper
* @data 2018/7/3 10:56
*/
public void htmlHandle(HttpServletResponse response, CloseableHttpResponse closeableHttpResponse) {
try {
Header encode = closeableHttpResponse.getFirstHeader("Content-Type");
response.setHeader(encode.getName(), encode.getValue());
String html = EntityUtils.toString(closeableHttpResponse.getEntity()); //将返回的html转换为字符
String res = htmlConvert(html); //处理html
PrintWriter writer = response.getWriter(); //获得返回流
writer.print(res);
writer.flush();
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}