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

com.weicoder.common.http.Http2Engine Maven / Gradle / Ivy

package com.weicoder.common.http;

import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpClient.Version;
import java.net.http.HttpRequest;
import java.net.http.HttpRequest.BodyPublishers;
import java.net.http.HttpResponse;
import java.util.Map;

import com.weicoder.common.constants.ArrayConstants;
import com.weicoder.common.constants.StringConstants;
import com.weicoder.common.lang.Conversion;
import com.weicoder.common.lang.Maps;
import com.weicoder.common.log.Logs;
import com.weicoder.common.util.EmptyUtil;
import com.weicoder.common.util.StringUtil;

/**
 * http客户端通讯
 * 
 * @author WD
 */
public final class Http2Engine {
	/**
	 * 使用get提交url
	 * 
	 * @param url 网址
	 * @return 返回的结果
	 */
	public static byte[] download(String url) {
		return download(url, Maps.emptyMap());
	}

	/**
	 * 使用get提交url
	 * 
	 * @param url 网址
	 * @return 返回的结果
	 */
	public static String get(String url) {
		// 使用GZIP一般服务器支持解压获得的流 然后转成字符串 一般为UTF-8
		String res = StringUtil.toString(download(url));
		Logs.debug("HttpEngine get url={} res={}", url, res);
		// 返回对象
		return res;
	}

	/**
	 * 使用get提交url
	 * 
	 * @param url    网址
	 * @param header http头列表
	 * @return 返回的结果
	 */
	public static String get(String url, Map header) {
		// 使用GZIP一般服务器支持解压获得的流 然后转成字符串 一般为UTF-8
		String res = StringUtil.toString(download(url, header));
		Logs.debug("HttpEngine get url={} header={} res={}", url, header, res);
		// 返回对象
		return res;
	}

	/**
	 * 使用get提交url
	 * 
	 * @param url    网址
	 * @param header http头列表
	 * @return 返回的结果
	 */
	public static byte[] download(String url, Map header) {
		try {
			// 获得连接
			HttpClient client = createClient();
			// 获得HttpRequest构建器
			HttpRequest.Builder builder = HttpRequest.newBuilder(new URI(url));
			// 头不为空,添加头
			if (EmptyUtil.isNotEmpty(header))
				for (Map.Entry h : header.entrySet())
					builder.setHeader(h.getKey(), Conversion.toString(h.getValue()));
			// HttpRequest
			HttpRequest request = builder.GET().build();
			// 请求
			HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofByteArray());
			// 返回结果
			return response.body();
		} catch (Exception e) {
			Logs.error(e, "Http2Engine get url={}", url);
		}
		return ArrayConstants.BYTES_EMPTY;
	}

	/**
	 * 使用post提交url
	 * 
	 * @param url  网址
	 * @param data 参数
	 * @return 返回的结果
	 */
	public static String post(String url, Map data) {
		return post(url, data, Maps.emptyMap());
	}

	/**
	 * 使用post提交url
	 * 
	 * @param url    网址
	 * @param data   参数
	 * @param header http头列表
	 * @return 返回的结果
	 */
	public static String post(String url, Map data, Map header) {
		try {
			// 获得client
			HttpClient client = createClient();
			// 获得HttpRequest构建器
			HttpRequest.Builder builder = HttpRequest.newBuilder(new URI(url));
			// 头不为空,添加头
			if (EmptyUtil.isNotEmpty(header))
				for (Map.Entry h : header.entrySet())
					builder.setHeader(h.getKey(), Conversion.toString(h.getValue()));

			// 请求body
			String body = null;
			// 判断有参数提交
			if (EmptyUtil.isNotEmpty(data)) {
				// 声明字符串缓存
				StringBuilder sb = new StringBuilder();
				// 循环参数
				data.entrySet().forEach(e -> {
					// 添加条件与分隔符
					sb.append(e.getKey()).append("=").append(e.getValue()).append("&");
				});
				body = sb.substring(0, sb.length() - 1);

			}
			// HttpRequest
			HttpRequest request = builder.POST(BodyPublishers.ofString(body)).build();
			// 请求
			HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofString());
			// 使用GZIP一般服务器支持解压获得的流 然后转成字符串 一般为UTF-8
			String res = response.body();
			Logs.debug("HttpEngine post url={} data={} header={} res={}", url, data, header, res);
			return res;
		} catch (Exception e) {
			Logs.error(e, "HttpEngine post url={} data={} header={}", url, data, header);
		}
		return StringConstants.EMPTY;
	}

	/**
	 * 创建http2 HttpClient
	 * 
	 * @return HttpClient
	 */
	private static HttpClient createClient() {
		return HttpClient.newBuilder().version(Version.HTTP_2).build();
	}

	private Http2Engine() {
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy