import com.alibaba.fastjson.JSONObject;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.protocol.HTTP;
import org.apache.http.util.EntityUtils;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.HttpEntity;
import org.apache.http.ParseException;
import org.apache.http.client.ClientProtocolException;
public static String send(String url, JSONObject jsonObject) throws ParseException, IOException {
String body = "";
try {
// 响应长度
long responseLength = 0;
//创建httpclient对象
CloseableHttpClient client = HttpClients.createDefault();
//设置超时
RequestConfig requestConfig = RequestConfig.custom()
.setConnectTimeout(Constant.TIME_OUT)//20000
.setConnectionRequestTimeout(Constant.TIME_OUT)
.setSocketTimeout(Constant.TIME_OUT)
.build();
//创建post方式请求对象
HttpPost httpPost = new HttpPost(url);//装填参数
StringEntity s = new StringEntity(jsonObject.toString(), "UTF-8");
//设置参数到请求对象中
s.setContentEncoding("UTF-8");
s.setContentType("application/json");
httpPost.setEntity(s);
System.out.println("请求地址:" + url);//设置header信息
//指定报文头【Content-type】、【User-Agent】
httpPost.setHeader("Content-type", "application/json");
httpPost.setHeader("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");//设置请求超时时间
httpPost.setConfig(requestConfig);// //设置HTTP请求超时时不进行自动重发
// client.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, new DefaultHttpMethodRetryHandler(0,false));//执行请求操作,并拿到结果(同步阻塞)
CloseableHttpResponse response = client.execute(httpPost);
//获取结果实体
HttpEntity entity = response.getEntity();
if (entity != null) {
responseLength = entity.getContentLength();
//按指定编码转换结果实体为String类型
body = EntityUtils.toString(entity, HTTP.UTF_8);
}
EntityUtils.consume(entity);
//释放链接
response.close();
}catch (ClientProtocolException e) {
LOGGER.info("该异常通常是协议错误导致,比如构造HttpGet对象时传入的协议不对(将'http'写成'htp')或者服务器端返回的内容不符合HTTP协议要求等,堆栈信息如下"
+ e);
throw e;
}catch (ParseException e) {
LOGGER.info(e.getMessage() + e);
throw e;
}catch (IOException e) {
LOGGER.info( "|该异常通常是网络原因引起的,如HTTP服务器未启动等,堆栈信息如下", e);
throw e;
}
return body;
}