All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.gitee.loulan_yxq.owner.http.HttpRequest Maven / Gradle / Ivy

The newest version!
package io.gitee.loulan_yxq.owner.http;

import io.gitee.loulan_yxq.owner.core.exception.IORuntimeException;
import io.gitee.loulan_yxq.owner.core.map.MapTool;
import io.gitee.loulan_yxq.owner.core.tool.CharsetTool;
import io.gitee.loulan_yxq.owner.core.tool.ObjectTool;
import io.gitee.loulan_yxq.owner.core.tool.StrTool;
import io.gitee.loulan_yxq.owner.http.exception.URISyntaxRuntimeException;
import org.apache.http.client.entity.EntityBuilder;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpEntityEnclosingRequestBase;
import org.apache.http.client.methods.HttpRequestBase;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.entity.ContentType;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;

import java.io.IOException;
import java.io.StreamTokenizer;
import java.net.URISyntaxException;
import java.nio.charset.Charset;
import java.util.Map;

/*********************************************************
 ** http请求对象
 ** 

** Date: Created in 2021/11/1 16:10 ** @author loulan ** @version 0.0.0 *********************************************************/ public class HttpRequest extends HttpEntityEnclosingRequestBase { // http的客户端对象 private CloseableHttpClient httpClient; // uri对象的创建对象 private URIBuilder uriBuilder; // 请求方法 private HttpMethod httpMethod; private HttpRequest(Builder builder) { this.httpClient = builder.httpClient; this.uriBuilder = builder.uriBuilder; this.httpMethod = builder.httpMethod; // 设置请求头 if (MapTool.isNotEmpty(builder.headers)) { builder.headers.forEach((key, value) -> { super.setHeader(key, String.valueOf(value)); }); } // 设置请求体 if (ObjectTool.isNotNull(builder.entityBuilder)) { super.setEntity(builder.entityBuilder.build()); } } /** * 运行执行当前的请求 * * @return 请求之后的响应对象 * @author :loulan */ public HttpResponse execute() { try { /**************************************************/ this.setURI(uriBuilder.build()); /**************************************************/ // 执行请求 CloseableHttpResponse execute = httpClient.execute(this); return new HttpResponse.Builder().httpResponse(execute).httpClient(httpClient).build(); } catch (IOException e) { throw new IORuntimeException(e); } catch (URISyntaxException e) { throw new URISyntaxRuntimeException(e); } } /** * 实现{@link HttpRequestBase}需要实现的方法 * * @return 方法名称 * @author :loulan */ @Override public String getMethod() { return httpMethod.toString(); } /********************************************************* ** {@link HttpRequest}的Builder对象 **

** Date: Created in 2021/11/12 9:15 ** @author loulan ** @version 0.0.0 *********************************************************/ public static class Builder { // http的客户端对象 private CloseableHttpClient httpClient; // uri对象的创建对象 private URIBuilder uriBuilder; // 请求方法 private HttpMethod httpMethod; // 编码方式 private Charset charset = CharsetTool.defaultCharset(); // 请求头配置数据 private Map headers; // 请求体构建对象 private EntityBuilder entityBuilder; private Builder() { this.httpClient = HttpClients.createDefault(); } /** * 设置方法, * * @param httpMethod 方法枚举类型 * @return {@link Builder}对象 * @author :loulan */ public Builder method(HttpMethod httpMethod) { this.httpMethod = httpMethod; return this; } /** * 设置请求对象的请求头 * * @param headers 请求头集合对象 * @return {@link Builder}对象 * @author :loulan */ public Builder headers(Map headers) { // 判断参数是否为空 if (MapTool.isNotEmpty(headers)) { if (MapTool.isEmpty(this.headers)) { this.headers = MapTool.map(); } this.headers.putAll(headers); } return this; } /** * 设置请求对象的请求头 * * @param key 请求头的类型 * @param value 请求头的值 * @return {@link Builder}对象 * @author :loulan */ public Builder header(String key, Object value) { if (MapTool.isEmpty(headers)) { this.headers = MapTool.map(); } this.headers.put(key, value); return this; } /** * 设置请求对象的请求头 * * @param bodyJson 请求体的json数据 * @return {@link Builder}对象 * @author :loulan */ public Builder body(String bodyJson) { if (StrTool.isNotEmpty(bodyJson)) { if (ObjectTool.isNull(this.entityBuilder)) { this.entityBuilder = EntityBuilder.create(); } this.entityBuilder.setText(bodyJson).setContentType(ContentType.APPLICATION_JSON); } return this; } /** * 设置编码方式 * * @param charset 编码方式 * @return {@link Builder}对象 * @author :loulan */ public Builder charset(Charset charset) { this.charset = ObjectTool.isNull(charset) ? CharsetTool.defaultCharset() : charset; return this; } /** * Description :设置请求链接的参数 * * @param key 参数的key * @param value 参数的值 * @return {@link Builder}对象 * @author :loulan */ public Builder param(String key, Object value) { this.uriBuilder.setParameter(key, String.valueOf(value)); return this; } /** * Description :设置请求链接的参数 * * @param paramMap 参数集合 * @return {@link Builder}对象 * @author :loulan */ public Builder param(Map paramMap) { if (MapTool.isNotEmpty(paramMap)) { paramMap.forEach((key, value) -> { this.uriBuilder.setParameter(key, String.valueOf(value)); }); } return this; } /** * 设置当前对象url地址,内部使用,需要在获取对象的时候就创建 * * @param url 地址链接 * @return {@link Builder}对象 * @author :loulan */ private Builder url(String url) { try { this.uriBuilder = new URIBuilder(url); } catch (URISyntaxException e) { throw new URISyntaxRuntimeException(e); } return this; } /** * 创建{@link HttpRequest}对象 * * @return {@link HttpRequest}对象 * @author :loulan */ public HttpRequest build() { return new HttpRequest(this); } /** * 获取get请求并设置url地址 * * @param url 地址链接 * @return {@link Builder}对象 * @author :loulan */ public static Builder get(String url) { return new Builder().method(HttpMethod.GET).url(url); } /** * 获取post请求并设置url地址 * * @param url 地址链接 * @return {@link Builder}对象 * @author :loulan */ public static Builder post(String url) { return new Builder().method(HttpMethod.POST).url(url); } /** * 获取head请求并设置url地址 * * @param url 地址链接 * @return {@link Builder}对象 * @author :loulan */ public static Builder head(String url) { return new Builder().method(HttpMethod.HEAD).url(url); } /** * 获取delete请求并设置url地址 * * @param url 地址链接 * @return {@link Builder}对象 * @author :loulan */ public static Builder delete(String url) { return new Builder().method(HttpMethod.DELETE).url(url); } /** * 获取options请求并设置url地址 * * @param url 地址链接 * @return {@link Builder}对象 * @author :loulan */ public static Builder options(String url) { return new Builder().method(HttpMethod.OPTIONS).url(url); } /** * 获取put请求并设置url地址 * * @param url 地址链接 * @return {@link Builder}对象 * @author :loulan */ public static Builder put(String url) { return new Builder().method(HttpMethod.PUT).url(url); } /** * 获取patch请求并设置url地址 * * @param url 地址链接 * @return {@link Builder}对象 * @author :loulan */ public static Builder patch(String url) { return new Builder().method(HttpMethod.PATCH).url(url); } /** * 获取trace请求并设置url地址 * * @param url 地址链接 * @return {@link Builder}对象 * @author :loulan */ public static Builder trace(String url) { return new Builder().method(HttpMethod.TRACE).url(url); } /** * 获取请求并设置url地址(该请求需要后期调用method方法进行设置,默认GET请求方法), * * @param url 地址链接 * @return {@link Builder}对象 * @author :loulan */ public static Builder request(String url) { return new Builder().url(url); } } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy