HttpClient调用http,https接口

该Java代码示例展示了如何使用ApacheHttpClient库执行HTTPGET和POST请求,包括处理HTTPS连接,自定义超时设置,以及信任所有SSL证书。对于POST请求,它还演示了如何传递JSONObject参数。如果遇到乱码问题,提到了调整Tomcat的字符编码设置。
摘要由CSDN通过智能技术生成

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可以尝试后打印出结果看一下

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值