HttpClient - 基本使用示例
一、HttpClient的主要功能
- 实现了所有 HTTP 的方法(GET、POST、PUT、HEAD、DELETE、HEAD、OPTIONS 等)
- 支持 HTTPS 协议
- 支持代理服务器(Nginx等)等
- 支持自动(跳转)转向
- ……
二、环境准备
1、JDK版本:JDK17
2、导入HttpClient包,版本:httpcomponents-client-4.5.13-bin,下载地址:http://hc.apache.org/downloads.cgi
3、导入fastjson包,版本:fastjson-1.2.78,下载地址:https://mvnrepository.com/
注:本人引入此依赖的目的是,在后续示例中,会用到“将对象转化为json字符串的功能”,也可以引其他有此功能的依赖。
三、使用方法
使用HttpClient发送请求、接收响应很简单,一般需要如下几步即可。
1. 创建HttpClient对象。
2. 创建请求方法的实例,并指定请求URL。如果需要发送GET请求,创建HttpGet对象;如果需要发送POST请求,创建HttpPost对象。
3. 如果需要发送请求参数,可调用HttpGet、HttpPost共同的setParams(HttpParams params)方法来添加请求参数;对于HttpPost对象而言,也可调用setEntity(HttpEntity entity)方法来设置请求参数。
4. 调用HttpClient对象的execute(HttpUriRequest request)发送请求,该方法返回一个HttpResponse。
5. 调用HttpResponse的getAllHeaders()、getHeaders(String name)等方法可获取服务器的响应头;调用HttpResponse的getEntity()方法可获取HttpEntity对象,该对象包装了服务器的响应内容。程序可通过该对象获取服务器的响应内容。
6. 释放连接。无论执行方法是否成功,都必须释放连接
四、详细示例
1、带参数的put请求
@Test(description = "新建订单") public void putTask() throws IOException { String url = "https://xxx-api.xxx.cn/order/web/v1/create"; String params ="{"Id":"6816301312","OrderName":"短袖"}"; CloseableHttpClient httpClient = HttpClients.createDefault(); HttpPut httpPut = new HttpPut(url); httpPut.addHeader("User-Agent","Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36"); httpPut.setHeader("Token",token); httpPut.addHeader("Content-Type","application/json;charset=utf-8"); StringEntity entity = new StringEntity(params,"UTF-8"); httpPut.setEntity(entity); CloseableHttpResponse response = httpClient.execute(httpPut); String body = EntityUtils.toString(response.getEntity()); System.out.println("新建订单,响应内容为:"+ body); }
2、带参数的post请求(发送json格式)
@Test(description = "新建订单") public void putTask() throws IOException { String url = "https://xxx-api.xxx.cn/order/web/v1/create"; String params ="{"Id":"6816301312","OrderName":"短袖"}"; CloseableHttpClient httpClient = HttpClients.createDefault(); HttpPost httpPost = new HttpPost(url); httpPost.addHeader("User-Agent","Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36"); httpPost.setHeader("Token",token); httpPost.addHeader("Content-Type","application/json;charset=utf-8"); StringEntity entity = new StringEntity(params,"UTF-8"); httpPost.setEntity(entity); CloseableHttpResponse response = httpClient.execute(httpPost); String body = EntityUtils.toString(response.getEntity()); System.out.println("新建订单,响应内容为:"+ body); }
3、带参数的post请求(发送key-value格式)
@Test(description ="登录接口") public void Login() throws IOException { String url = "https://xxx.cn/saas/auth/login"; CloseableHttpClient httpClient = HttpClients.createDefault(); HttpPost httpPost = new HttpPost(url); httpPost.addHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36"); httpPost.addHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8"); List<BasicNameValuePair> param = new ArrayList<>(4); param.add(new BasicNameValuePair("loginFromServer", "http://xxx.cn")); param.add(new BasicNameValuePair("username", "李白")); param.add(new BasicNameValuePair("password", "123456")); UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(param, StandardCharsets.UTF_8); httpPost.setEntity(formEntity); CloseableHttpResponse response = httpClient.execute(httpPost);//执行请求 //System.out.println("响应状态为:" + response.getStatusLine()); String body = EntityUtils.toString(response.getEntity());//获取响应内容 System.out.println("Login的响应内容为:" + body); JSONObject jsonObject = JSON.parseObject(body);//转换成json格式 String data = jsonObject.getString("data");//获取到data值 //拼接双引号: "\""+ +"\"" Pattern pattern = Pattern.compile("code=(.*)");//正则表达式提取code Matcher matcher = pattern.matcher(data); if(matcher.find()) { code = matcher.group(1); System.out.println("提取的code为:" + code); } //return url; }
4、带参数的get请求(json格式)
@Test(description = "获取订单") public void getDetail() throws IOException { String url = "https://xxx-api.xxx.cn/order/web/v1/detail?id=123&username=李白"; CloseableHttpClient httpClient = HttpClients.createDefault(); HttpGet httpGet = new HttpGet(url); httpGet.addHeader("User-Agent","Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36"); httpGet.setHeader("Token",token); httpGet.addHeader("Content-Type","application/json;charset=utf-8"); HttpResponse response = httpClient.execute(httpGet); String body = EntityUtils.toString(response.getEntity()); System.out.println("获取订单,响应内容为:"+ body); }
五、其他
来自:https://www.cnblogs.com/fatCat1/p/11904954.html