java发送Http请求

226 阅读2分钟
Http简介

http请求是采用TCP协议进行传输的,是一种超文本传输协议,可以实现客户端和服务端之间通信的请求响应协议,可以用来客户端和服务器之间传输数据,发动请求。

浏览器会向服务器发送请求,经过三次握手,建立通信,接着服务器向客户端返回响应;响应的内容包含响应头,响应内容等等。

常见的http请求一共有四种,分别是GET,POST,PUT,DELETE

发送http的工具

1.浏览器直接发送http请求
2.通过postman发送http请求
3.通过linux机器自带的命令curl来发送http请求
4.通过程序语言发送,比如java,C,C++,.net等语言

java语言发送HTTP请求

        httpClient = HttpClients.custom().build();
           HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory();
           requestFactory.setHttpClient(httpClient);
          RequestEntity<?> requestEntity = RequestEntity.post(new URI(url))
                .header(HttpHeaders.CONTENT_TYPE, App.APPLICATION_JSON_UTF8_VALUE)
                .body(request);

创建一个CloseableHttpClient对象,该对象的构造方法是私有的,我们可以直接调用custom方法来初始化该对象

image.png

该类是纸质链式变成,直接调用 build 方法创建 CloseableHttpClient 。创建一个 HttpComponentsClientHttpRequestFactory 对象,调用 setHttpCliet 方法发送。可以借助 RestTemplate 来发送post请求,RestTemplate是常见的调用http请求的工具类,支持私有化构建对象。

ObjectMapper objectMapper = new ObjectMapper();
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
objectMapper.configure(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true);
String responseBody = responseEntity.getBody();
logger.info("server response : {}", responseBody);
return objectMapper.readValue(responseEntity.getBody(), this.getJavaType(objectMapper, clazz));

借助JackJson将返回的json数据转化为JavaBean.JackJosn 不同于FastJson,是SpringBoot自带的框架,主要是借助ObjectMapper来进行一系列操作,可以调用configure方法增加不同的配置 DeserializationFeature常见的几种配置有
USE_JAVA_ARRAY_FOR_JSON_ARRAY
FAIL_ON_UNKNOWN_PROPERTIES
FAIL_ON_NULL_FOR_PRIMITIVES
FAIL_ON_NUMBERS_FOR_ENUMS
调用readValue方法将json数据转化为JavaBean

总结

Java发送HTTP请求总体不难,主要是分为三步 1.创建一个HttpComponentsClientHttpRequestFactory
2.调用 RestTemplate.exchange方法发送请求
3.利用Json转化器(FastJson或者是JackJson)将Json数据转化为JavaBean.

量变引起质变!