package com.http;

import java.net.URI;

import java.util.ArrayList;

import java.util.List;

import org.apache.commons.collections.CollectionUtils;

import org.apache.http.HttpEntity;

import org.apache.http.HttpResponse;

import org.apache.http.NameValuePair;

import org.apache.http.client.HttpClient;

import org.apache.http.client.entity.UrlEncodedFormEntity;

import org.apache.http.client.methods.HttpGet;

import org.apache.http.client.methods.HttpPost;

import org.apache.http.entity.StringEntity;

import org.apache.http.impl.client.DefaultHttpClient;

import org.apache.http.message.BasicNameValuePair;

import org.apache.http.params.CoreConnectionPNames;

import org.apache.http.util.EntityUtils;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import com.alibaba.fastjson.JSON;

import com.alibaba.fastjson.JSONObject;

public class HttpClientUtil {

private static final String ENCODE = "UTF-8";

private static final Logger LOGGER = LoggerFactory.getLogger(HttpClientUtil.class);

public static final Integer CONNECTION_TIMEOUT = 5000;

public static final Integer SO_TIMEOUT = 5000;

/**
* get请求,参数拼接好
* @Description TODO(描述)
* @Author wangymd
* @Date 2021-10-22 20:10:04
* @param url
* @return
*
*/
public static String get(String url) {
try {
HttpClient httpClient = new DefaultHttpClient();
httpClient.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, CONNECTION_TIMEOUT);
httpClient.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT, SO_TIMEOUT);

HttpGet httpGet = new HttpGet(url);
HttpResponse response = httpClient.execute(httpGet);
if (null == response.getStatusLine() || 200 != response.getStatusLine().getStatusCode()) {
return null;
}

HttpEntity entity = response.getEntity();
return EntityUtils.toString(entity, ENCODE);
} catch (Exception e) {
LOGGER.error("get request error url:{}, e:{}",url, e);
}
return null;
}

/**
* get请求url不带?
* @Description TODO(描述)
* @Author wangymd
* @Date 2021-10-22 20:09:34
* @param url
* @param params
* @return
*
*/
public static String get(String url, List<NameValuePair> params) {
try {
HttpClient httpClient = new DefaultHttpClient();
httpClient.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, CONNECTION_TIMEOUT);
httpClient.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT, SO_TIMEOUT);

HttpGet httpGet = new HttpGet(url);

//参数设置
if(CollectionUtils.isNotEmpty(params)) {
String paramStr = EntityUtils.toString(new UrlEncodedFormEntity(params));
httpGet.setURI(new URI(httpGet.getURI().toString() + "?" + paramStr));
}

HttpResponse response = httpClient.execute(httpGet);
if (null == response.getStatusLine() || 200 != response.getStatusLine().getStatusCode()) {
return null;
}

HttpEntity entity = response.getEntity();
return EntityUtils.toString(entity, ENCODE);
} catch (Exception e) {
LOGGER.error("get request error url:{}, timeout:{}, e:{}",url, JSON.toJSONString(params), e);
}
return null;
}

/**
* post请求json参数
* @Description TODO(描述)
* @Author wangymd
* @Date 2021-10-22 20:06:20
* @param url
* @param params
* @return
*
*/
public static String post(String url, List<NameValuePair> params) {
try {
HttpClient httpClient = new DefaultHttpClient();
httpClient.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, CONNECTION_TIMEOUT);
httpClient.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT, SO_TIMEOUT);

HttpPost httpPost = new HttpPost(url);
httpPost.setHeader("Content-type", "application/json;charset=utf-8");
httpPost.setHeader("Connection", "Close");

//参数设置
JSONObject jsonObject = new JSONObject();
if(CollectionUtils.isNotEmpty(params)) {
for (NameValuePair nameValuePair : params) {
jsonObject.put(nameValuePair.getName(), nameValuePair.getValue());
}
}
StringEntity stringEntity = new StringEntity(jsonObject.toJSONString());
stringEntity.setContentType("application/json");
stringEntity.setContentEncoding(ENCODE);
httpPost.setEntity(stringEntity);

HttpResponse response = httpClient.execute(httpPost);
if (null == response.getStatusLine() || 200 != response.getStatusLine().getStatusCode()) {
return null;
}

HttpEntity entity = response.getEntity();
return EntityUtils.toString(entity, ENCODE);
} catch (Exception e) {
LOGGER.error("post request error url:{}, timeout:{}, e:{}",url, JSON.toJSONString(params), e);
}
return null;
}

/**
* 测试
* @Description TODO(描述)
* @Author wangymd
* @Date 2021-10-20 11:17:26
* @param args
* @throws Exception
*
*/
public static void main(String[] args) throws Exception {
String accesstoken = "xxxxxx";
List<NameValuePair> nvps = new ArrayList <NameValuePair>();
nvps.add(new BasicNameValuePair("p1", "p1"));
nvps.add(new BasicNameValuePair("p2", "p2"));

String result = HttpClientUtil.post("https://api.weixin.qq.com/mmec/api/XXXX?access_token=" + accesstoken, nvps);

System.out.println(result);
}


}