
net.wicp.tams.common.http.HttpClient Maven / Gradle / Ivy
The newest version!
/*
* **********************************************************************
* Copyright (c) 2022 .
* All rights reserved.
* 项目名称:common
* 项目描述:公共的工具集
* 版权说明:本软件属andy.zhou([email protected])所有。
* ***********************************************************************
*/
package net.wicp.tams.common.http;
import java.io.File;
import java.io.InputStream;
import java.nio.charset.Charset;
import java.util.Map;
import java.util.concurrent.FutureTask;
import org.apache.commons.lang3.ArrayUtils;
import org.apache.http.Consts;
import org.apache.http.Header;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPatch;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpRequestBase;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.InputStreamEntity;
import org.apache.http.entity.StringEntity;
import org.apache.http.entity.mime.HttpMultipartMode;
import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.apache.http.entity.mime.content.FileBody;
import org.apache.http.entity.mime.content.InputStreamBody;
import org.apache.http.entity.mime.content.StringBody;
import org.apache.http.message.BasicHeader;
import org.apache.http.protocol.HTTP;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;
import lombok.extern.slf4j.Slf4j;
import net.wicp.tams.common.Conf;
import net.wicp.tams.common.apiext.IOUtil;
import net.wicp.tams.common.apiext.StringUtil;
import net.wicp.tams.common.apiext.json.JSONUtil;
import net.wicp.tams.common.exception.ExceptAll;
import net.wicp.tams.common.exception.ProjectException;
@Slf4j
public abstract class HttpClient {
private HttpClient() {
}
public static final String ENCODE = "UTF-8";
public static final String HEAD_TYPE = "application/json";
public static final String CONTENT_TYPE = "text/json";
public static final String HEAD_FILENAME = "filename";// 上传文件时,把文件名做为head发送请求,这个head名
public static HttpResult doGet(String url) {
HttpRequestBase rq = new HttpGet(url);
HttpCallThread ht = new HttpCallThread(rq);
HttpResult result = ht.call();
return result;
}
public static HttpResult doPatch(String url) {
HttpRequestBase rq = new HttpPatch(url);
HttpCallThread ht = new HttpCallThread(rq);
HttpResult result = ht.call();
return result;
}
public static FutureTask doGetAsyn(String url) {
HttpRequestBase rq = new HttpGet(url);
HttpCallThread ht = new HttpCallThread(rq);
return ht.callAsyn();
}
public static HttpResult doPost(String url, ObjectNode param, Header... headers) {
HttpCallThread ht = new HttpCallThread(doPostCommon(url, param == null ? null : param.toString(), headers));
HttpResult result = ht.call();
return result;
}
public static FutureTask doPostAsyn(String url, ObjectNode param, Header... headers) {
HttpCallThread ht = new HttpCallThread(doPostCommon(url, param.toString(), headers));
return ht.callAsyn();
}
public static HttpPost doPostCommon(String url, String param, Header... headers) {
HttpPost rq = new HttpPost(url);
rq.addHeader(HTTP.CONTENT_TYPE, HttpClient.HEAD_TYPE);
if (ArrayUtils.isNotEmpty(headers)) {
for (Header header : headers) {
rq.addHeader(header);
}
}
if (StringUtil.isNotNull(param)) {
StringEntity se = new StringEntity(param, HttpClient.ENCODE);
se.setContentType(HttpClient.CONTENT_TYPE);
se.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE, HttpClient.HEAD_TYPE));
rq.setEntity(se);
}
return rq;
}
public static HttpResult doPostForm(String url, Map params, Header... headers) {
HttpCallThread ht = new HttpCallThread(doPostFormCommon(url, params, headers));
HttpResult result = ht.call();
return result;
}
public static HttpPost doPostFormCommon(String url, Map param, Header... headers) {
HttpPost rq = new HttpPost(url);
if (ArrayUtils.isNotEmpty(headers)) {
for (Header header : headers) {
rq.addHeader(header);
}
}
MultipartEntityBuilder entityBuild = MultipartEntityBuilder.create()
.setMode(HttpMultipartMode.BROWSER_COMPATIBLE).setCharset(Charset.forName(HttpClient.ENCODE));// BROWSER_COMPATIBLE
// 设置浏览器兼容模式,解决文件名乱码问题
for (String key : param.keySet()) {
Object value = param.get(key);
if ("java.io.File".equals(value.getClass().getName())) {
FileBody pluginFile = new FileBody((File) value);
entityBuild.addPart(key, pluginFile);
} else if (value.getClass().isAssignableFrom(InputStream.class)) {// 是流,不是文件
InputStreamBody inputStream = new InputStreamBody((InputStream) value, key);
entityBuild.addPart(key, inputStream);
} else {// TODO 如果是数组,如何处理
StringBody context = new StringBody(String.valueOf(value),
ContentType.create("text/plain", Consts.UTF_8));
entityBuild.addPart(key, context);
}
}
rq.setEntity(entityBuild.build());
return rq;
}
public static HttpPost doPostXml(String url, String param, Header... headers) {
String headType = net.wicp.tams.common.constant.ContentType.xbl.getValue();// "application/xml";
HttpPost rq = new HttpPost(url);
rq.addHeader(HTTP.CONTENT_TYPE, headType);
if (ArrayUtils.isNotEmpty(headers)) {
for (Header header : headers) {
rq.addHeader(header);
}
}
if (StringUtil.isNotNull(param)) {
StringEntity se = new StringEntity(param, HttpClient.ENCODE);
// se.setContentType(CONTENT_TYPE);
se.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE, headType));
rq.setEntity(se);
}
return rq;
}
/***
* 上传jar包
*
* @param url
* @param fileName
* @param in
* @param contentType
* @param headers
* @return
*/
public static HttpPost doPostFile(String url, String fileName, InputStream in,
net.wicp.tams.common.constant.ContentType contentType, Header... headers) {
if (StringUtil.isNull(fileName) || in == null) {
return null;
}
String headType = net.wicp.tams.common.constant.ContentType.jar.getValue();// "application/xml";
HttpPost rq = new HttpPost(url);
rq.addHeader(HTTP.CONTENT_TYPE, headType);
rq.addHeader(HttpClient.HEAD_FILENAME, fileName);
if (ArrayUtils.isNotEmpty(headers)) {
for (Header header : headers) {
rq.addHeader(header);
}
}
InputStreamEntity inEntity = new InputStreamEntity(in, ContentType.create(headType));
rq.setEntity(inEntity);
return rq;
}
public static HttpPost doPostFile(String url, String fileName, InputStream in, Header... headers) {
return doPostFile(url, fileName, in, net.wicp.tams.common.constant.ContentType.findByFileName(fileName),
headers);
}
public static HttpPost doPostJar(String url, String jarFileName, InputStream in, Header... headers) {
return doPostFile(url, jarFileName, in, net.wicp.tams.common.constant.ContentType.jar, headers);
}
/***
* 返回真正的URL
*
* @param relaUrl
* @return
*/
public static String packurl(String relaUrl) {
String context = StringUtil.getContext();
if (StringUtil.isNull(context)) {
context = String.format("%s://%s:%s", Conf.get("common.http.url.protocol"),
Conf.get("common.http.url.host"), Conf.get("common.http.url.port"));
}
return IOUtil.mergeFolderAndFilePath(context, relaUrl);
}
/***
* 返回结果
*
* @param relaUrl 相对地址
* @param params
* @return
* @throws ProjectException
*/
public static ObjectNode doPostRela(String relaUrl, Object... params) throws ProjectException {
ObjectNode param = JSONUtil.packParams(params);
return doPostRela(relaUrl, param);
}
public static ObjectNode doPostRela(String relaUrl, ObjectNode params) throws ProjectException {
HttpResult ret = HttpClient.doPost(HttpClient.packurl(relaUrl), params);
if (ret == null) {
log.info("[url]:{} [params]:{}", relaUrl, params.toString());
throw new ProjectException(ExceptAll.project_timeout, "调用EB超时");
}
String retstr = ret.getBodyStr();
ObjectMapper objmap = new ObjectMapper();
ObjectNode retjson = (ObjectNode) JSONUtil.parserStr(objmap, retstr);
return retjson;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy