import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.nio.charset.Charset;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import org.apache.http.HttpEntity;
import org.apache.http.NameValuePair;
import org.apache.http.ParseException;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.config.Registry;
import org.apache.http.config.RegistryBuilder;
import org.apache.http.conn.socket.ConnectionSocketFactory;
import org.apache.http.conn.socket.PlainConnectionSocketFactory;
import org.apache.http.conn.ssl.NoopHostnameVerifier;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import net.sf.json.JSONObject;
public class HttpClientServiceUtils
{
public static JSONObject doGet(String url)
{
JSONObject returnObj = null;
CloseableHttpClient httpClient = null;
try
{
Registry<ConnectionSocketFactory> registry = RegistryBuilder.<ConnectionSocketFactory> create().register("http", PlainConnectionSocketFactory.INSTANCE)
.register("https", trustHttpsCertificates()).build();
PoolingHttpClientConnectionManager connManager = new PoolingHttpClientConnectionManager(registry);
HttpClientBuilder builder = HttpClients.custom().setConnectionManager(connManager);
httpClient = builder.build();
HttpGet httpGet = new HttpGet(url);
RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(35000)// 设置连接主机服务超时时间
.setConnectionRequestTimeout(35000)// 设置连接请求超时时间
.setSocketTimeout(60000)// 设置读取数据连接超时时间
.build();
httpGet.setConfig(requestConfig);
CloseableHttpResponse response = httpClient.execute(httpGet);
HttpEntity entity = response.getEntity();
if (entity != null)
{
String body = EntityUtils.toString(entity, "UTF-8");
returnObj = JSONObject.fromObject(body);
}
}
catch (ClientProtocolException e)
{
e.printStackTrace();
}
catch (ParseException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
catch (Exception e)
{
e.printStackTrace();
}
finally
{
// 关闭连接,释放资源
try
{
httpClient.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
return returnObj;
}
public static SSLConnectionSocketFactory trustHttpsCertificates() throws Exception
{
SSLConnectionSocketFactory socketFactory = null;
TrustManager[] trustAllCerts = new TrustManager[1];
TrustManager tm = new myTM();
trustAllCerts[0] = tm;
SSLContext sc = null;
try
{
sc = SSLContext.getInstance("TLS");
sc.init(null, trustAllCerts, null);
socketFactory = new SSLConnectionSocketFactory(sc, NoopHostnameVerifier.INSTANCE);
}
catch (Exception e)
{
e.printStackTrace();
}
return socketFactory;
}
static class myTM implements TrustManager, X509TrustManager
{
@Override
public void checkClientTrusted(X509Certificate[] arg0, String arg1) throws CertificateException
{
}
@Override
public void checkServerTrusted(X509Certificate[] arg0, String arg1) throws CertificateException
{
}
@Override
public X509Certificate[] getAcceptedIssuers()
{
return null;
}
}
}
如果是post请求把HttpGet换成HttpPost,把需要的参数以JSONObject的格式传过来(下面的value即是参数),代码如下
HttpPost httpPost = new HttpPost(url);
StringEntity entity = new StringEntity(value.toString(), Charset.forName("UTF-8"));
httpPost.setEntity(entity);
httpPost.setHeader("Content-Type", "application/json");
如果返回结果出现乱码,可以修改tomcat的catalina.bat文件,增加set JAVA_OPTS=-Xms512m -Xmx1024m -XX:MaxPermSize=l024m -Dfile.encoding=UTF-8,至于是GBK,还是UTF-8可以尝试后打印出结果看一下