try { CloseableHttpClient client = HttpClients.createDefault(); HttpUriRequest getRequest = RequestBuilder.get(34;http://localhost:9092/test.jsp")// .addParameter("testIn1", URLEncoder.encode("测试", "GBK"))// .addParameter("testIn2", URLEncoder.encode("测试2", "UTF-8"))// .addHeader("content-type", "text/html:charset=UTF-8")// .build(); CloseableHttpResponse response = client.execute(getRequest); HttpEntity entity = response.getEntity(); System.out.println(entity.getContentType().toString()); System.out.println(EntityUtils.toString(entity)); HttpClientUtils.closeQuietly(response);} catch (ClientProtocolException e) { e.printStackTrace();} catch (IOException e) { e.printStackTrace();}
创建一个要求客户端:HttpClients.createDefault(),用来实际发起调用http要求,可以类比成浏览器。创建一个GET要求:通过要求布局器RequestBuilder的get方法布局一个get要求,通过addParameter方法向get要求里追加参数,通过addHeader方法向get要求里追加要求头信息,要求头信息比如content-type,或者双方约定的要求头,比如token,通过build方法返回要求工具。发送要求并得到相应:通过要求客户真个execute方法实行要求并得到返回值要求相应。获取相应结果:获取相应工具的实体HttpEntity,通过EntityUtils的toString方法将实体转成字符串(例子里为要求的一个jsp(html)页面,实际返回为jsp页面里html内容),这里一样平常还要指定字符集,尤其是当返回的实体里没有指定字符集时。
把稳:通过addParameter项get要求里追加参数时,要通过URLEncoder对参数进行指定字符集编码,紧张是为理解决中文乱码问题,同样的,吸收方要通过URLDecoder对参数进行对应字符集的解码。
附:吸收jsp样例
<%@page import="java.net.URLDecoder"%><%@page import="java.util.HashMap"%><%@page import="java.nio.charset.Charset"%><%@page language="java" contentType="text/html; charset=GBK" pageEncoding="GBK"%><%System.out.println("默认字符集:" + Charset.defaultCharset().toString());System.out.println("要求字符集:" + request.getCharacterEncoding());System.out.println("要求入参testIn1(utf-8):" + URLDecoder.decode(request.getParameter("testIn1"), "UTF-8"));System.out.println("要求入参testIn1:(gbk)" + URLDecoder.decode(request.getParameter("testIn1"), "GBK") );System.out.println("要求入参testIn1:" + request.getParameter("testIn1"));System.out.println("要求入参testIn2(utf-8):" + URLDecoder.decode(request.getParameter("testIn2"), "UTF-8"));System.out.println("要求入参testIn2:(gbk)" + URLDecoder.decode(request.getParameter("testIn2"), "GBK"));System.out.println("要求入参testIn2:" + request.getParameter("testIn2"));%><!DOCTYPE html><html><head><meta charset="GBK"><title>这是标题</title></head><body>这是正文部分</body></html>
利用HttpClient发送一个用于文件获取的GET要求
try {CloseableHttpClient client = HttpClients.createDefault();HttpGet get = new HttpGet("https://www.baidu.com/img/PCfb_5bf082d29588c07f842ccde3f97243ea.png");CloseableHttpResponse response = client.execute(get);HttpEntity entity = response.getEntity();FileOutputStream fos = new FileOutputStream(new File("D:/abc.png"));entity.writeTo(fos);fos.close();} catch (ClientProtocolException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}
创建一个要求客户端:HttpClients.createDefault(),用来实际发起调用http要求,可以类比成浏览器。创建一个GET要求:直接new一个HttpGet工具,并传入文件地址,如果有额外参数,建议利用上一例子中的办法创建。发起GET要求并得到相应:通过要求客户真个execute方法实行要求并得到返回值要求相应。获取相应结果:获取相应工具的实体HttpEntity,并将实体通过输出字节流在本地天生文件,或者想要的其他效果,比如写入数据库blob等,可以通过entity.getContent()获取实体的输入字节流。
下一期操持:通过HttpClient发送POST要求。
您的关注是对我莫大的支持!