当前位置: 首页 > news >正文

HttpClientr入门

HttpClientr入门

介绍

HttpClient是Apache Jakarta Common下的子项目,可以用来提供高效的,最新的、功能丰富的支持HTTP协议的客户端编程工具包,并且它支持HTTP协议的版本和建议。

依赖导入
<dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>4.5.13</version>
</dependency>
核心API
  • HttpClient
  • HttpClients
  • CloseableHttpClient
  • HttpGet
  • HttpPost
发送请求步骤:
  1. 创建HttpClient对象
  2. 创建Http请求对象
  3. 调用HttpClient的execute方法发送请求
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;@SpringBootTest
@Slf4j
public class HttpClientTest {@Testpublic void HttpGET() throws Exception {//1.创建请求HttpClient对象CloseableHttpClient httpClient = HttpClients.createDefault();//2.创建Http请求对象HttpGet httpGet = new HttpGet("http://localhost:8080/user/shop/status");//3.调用HttpClient的execute方法发送请求CloseableHttpResponse response = httpClient.execute(httpGet);//获取数据//获取响应的状态码int code = response.getStatusLine().getStatusCode();System.out.println("返回的状态码是:"+code);//获取响应的数据HttpEntity entity = response.getEntity();String body = EntityUtils.toString(entity);System.out.println("服务器返回的数据为:"+body);//关闭请求httpClient.close();response.close();}@Testpublic void HttpPost() throws Exception{//创建HttpClient对象CloseableHttpClient httpClient = HttpClients.createDefault();//创建Http请求对象HttpPost post = new HttpPost("http://localhost:8080/admin/employee/login");//构建请求的参数JSONObject jsonObject = new JSONObject();jsonObject.put("username","admin");jsonObject.put("password","123456");StringEntity stringEntity = new StringEntity(jsonObject.toString());//指定编码格式stringEntity.setContentEncoding("utf-8");//数据格式stringEntity.setContentType("application/json");post.setEntity(stringEntity);//发送请求CloseableHttpResponse response = httpClient.execute(post);//获取响应回来的参数int statusCode = response.getStatusLine().getStatusCode();System.out.println("状态码:"+statusCode);HttpEntity entity = response.getEntity();String body = EntityUtils.toString(entity);System.out.println("post请求响应回来的参数:"+body);//关闭服务httpClient.close();post.clone();}
}

HttpClientUtil 工具类,使用的时候直接调用

import com.alibaba.fastjson.JSONObject;
import org.apache.http.NameValuePair;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;import java.io.IOException;
import java.net.URI;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;/*** Http工具类*/
public class HttpClientUtil {static final  int TIMEOUT_MSEC = 5 * 1000;/*** 发送GET方式请求* @param url* @param paramMap* @return*/public static String doGet(String url,Map<String,String> paramMap){// 创建Httpclient对象CloseableHttpClient httpClient = HttpClients.createDefault();String result = "";CloseableHttpResponse response = null;try{URIBuilder builder = new URIBuilder(url);if(paramMap != null){for (String key : paramMap.keySet()) {builder.addParameter(key,paramMap.get(key));}}URI uri = builder.build();//创建GET请求HttpGet httpGet = new HttpGet(uri);//发送请求response = httpClient.execute(httpGet);//判断响应状态if(response.getStatusLine().getStatusCode() == 200){result = EntityUtils.toString(response.getEntity(),"UTF-8");}}catch (Exception e){e.printStackTrace();}finally {try {response.close();httpClient.close();} catch (IOException e) {e.printStackTrace();}}return result;}/*** 发送POST方式请求* @param url* @param paramMap* @return* @throws IOException*/public static String doPost(String url, Map<String, String> paramMap) throws IOException {// 创建Httpclient对象CloseableHttpClient httpClient = HttpClients.createDefault();CloseableHttpResponse response = null;String resultString = "";try {// 创建Http Post请求HttpPost httpPost = new HttpPost(url);// 创建参数列表if (paramMap != null) {List<NameValuePair> paramList = new ArrayList();for (Map.Entry<String, String> param : paramMap.entrySet()) {paramList.add(new BasicNameValuePair(param.getKey(), param.getValue()));}// 模拟表单UrlEncodedFormEntity entity = new UrlEncodedFormEntity(paramList);httpPost.setEntity(entity);}httpPost.setConfig(builderRequestConfig());// 执行http请求response = httpClient.execute(httpPost);resultString = EntityUtils.toString(response.getEntity(), "UTF-8");} catch (Exception e) {throw e;} finally {try {response.close();} catch (IOException e) {e.printStackTrace();}}return resultString;}/*** 发送POST方式请求* @param url* @param paramMap* @return* @throws IOException*/public static String doPost4Json(String url, Map<String, String> paramMap) throws IOException {// 创建Httpclient对象CloseableHttpClient httpClient = HttpClients.createDefault();CloseableHttpResponse response = null;String resultString = "";try {// 创建Http Post请求HttpPost httpPost = new HttpPost(url);if (paramMap != null) {//构造json格式数据JSONObject jsonObject = new JSONObject();for (Map.Entry<String, String> param : paramMap.entrySet()) {jsonObject.put(param.getKey(),param.getValue());}StringEntity entity = new StringEntity(jsonObject.toString(),"utf-8");//设置请求编码entity.setContentEncoding("utf-8");//设置数据类型entity.setContentType("application/json");httpPost.setEntity(entity);}httpPost.setConfig(builderRequestConfig());// 执行http请求response = httpClient.execute(httpPost);resultString = EntityUtils.toString(response.getEntity(), "UTF-8");} catch (Exception e) {throw e;} finally {try {response.close();} catch (IOException e) {e.printStackTrace();}}return resultString;}private static RequestConfig builderRequestConfig() {return RequestConfig.custom().setConnectTimeout(TIMEOUT_MSEC).setConnectionRequestTimeout(TIMEOUT_MSEC).setSocketTimeout(TIMEOUT_MSEC).build();}}
http://www.lryc.cn/news/175463.html

相关文章:

  • 网关-开放API接口签名验证方案
  • Linux知识点 -- 网络基础 -- 传输层
  • 计算机视觉与深度学习-经典网络解析-AlexNet-[北邮鲁鹏]
  • Django学习笔记-实现联机对战(下)
  • 一文了解什么SEO
  • SpringBoot+Jpa+Thymeleaf实现增删改查
  • 最快的包管理器--pnpm创建vue项目完整步骤
  • 算法通过村第九关-二分(中序遍历)黄金笔记|二叉搜索树
  • Mock.js之Element-ui搭建首页导航与左侧菜单
  • robotframework在Jenkins执行踩坑
  • 关于ElementUI之首页导航与左侧菜单实现
  • 基于springboot小区疫情防控系统
  • 【k8s】YAML语言基础
  • AI时代的中国困境: ChatGPT为什么难以复制
  • 如何使用Docker安装最新版本的Redis并设置远程访问(含免费可视化工具)
  • 怒刷LeetCode的第8天(Java版)
  • Vue Hooks 让Vue开发更简单与高效
  • Go编程规范
  • premiere 新建 视频导入 视频拼接 视频截取 多余视频删除
  • 笔记01:第一行Python
  • 资产连接支持会话分屏,新增Passkey用户认证方式,支持查看在线用户信息,JumpServer堡垒机v3.7.0发布
  • uniapp项目实践总结(二十二)分包优化和游客模式
  • Unity中UI组件对Shader调色
  • PhpStorm 2023年下载、安装教程和好用插件,保姆级教程
  • 1960-2017年世界各国总和生育率数据
  • java.math.BigDecimal is not a supported Java type
  • Unity之Hololens开发如何实现UI交互
  • 二、ubuntu主机端tftp及nfs服务开发环境安装
  • Android 12修改usb tp触摸唤醒
  • #define定义标识符详解