HttpRequestUtil工具类

本文介绍了一种在Java中处理HTTPS请求的方法,包括通过自定义信任管理器绕过证书验证,以及使用Apache HttpClient进行GET和POST请求的具体实现。文章详细展示了如何创建SSLContext,设置SSLSocketFactory,以及如何使用HttpClient发送请求并处理响应。

**

两种请求方式

**

第一种封装一个HttpRequestUtil

import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;

import javax.net.ssl.X509TrustManager;

public class MyX509TrustManager  implements X509TrustManager{

	public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
		
	}

	public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
		
	}

	public X509Certificate[] getAcceptedIssuers() {
		return null;
	}

}
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.ConnectException;
import java.net.URL;

import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManager;

import net.sf.json.JSONObject;

public class HttpRequestUtil {

	public static final String GET_METHOD = "GET";

	public static final String POST_METHOD = "POST";

	public static final String DEFAULT_CHARSET = "utf-8";

	/**
	 * 发送https请求
	 * 
	 * @param requestUrl
	 *            请求地址
	 * @param requestMethod
	 *            请求方式(GET、POST)
	 * @param outputStr
	 *            提交的数据
	 * @return JSONObject(通过JSONObject.get(key)的方式获取json对象的属性值)
	 */
	public static JSONObject httpsRequest(String requestUrl, String requestMethod, String outputStr) {
		JSONObject jsonObject = null;
		try {
			// 创建SSLContext对象,并使用我们指定的信任管理器初始化
			TrustManager[] tm = { new MyX509TrustManager() };
			SSLContext sslContext = SSLContext.getInstance("SSL", "SunJSSE");
			sslContext.init(null, tm, new java.security.SecureRandom());
			// 从上述SSLContext对象中得到SSLSocketFactory对象
			SSLSocketFactory ssf = sslContext.getSocketFactory();

			URL url = new URL(requestUrl);
			HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
			conn.setSSLSocketFactory(ssf);

			conn.setDoOutput(true);
			conn.setDoInput(true);
			conn.setUseCaches(false);
			// 设置请求方式(GET/POST)
			conn.setRequestMethod(requestMethod);

			// 当outputStr不为null时向输出流写数据
			if (null != outputStr) {
				OutputStream outputStream = conn.getOutputStream();
				// 注意编码格式
				outputStream.write(outputStr.getBytes("UTF-8"));
				outputStream.close();
			}

			// 从输入流读取返回内容
			InputStream inputStream = conn.getInputStream();
			InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8");
			BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
			String str = null;
			StringBuffer buffer = new StringBuffer();
			while ((str = bufferedReader.readLine()) != null) {
				buffer.append(str);
			}

			// 释放资源
			bufferedReader.close();
			inputStreamReader.close();
			inputStream.close();
			inputStream = null;
			conn.disconnect();
			jsonObject = JSONObject.fromObject(buffer.toString());
		} catch (ConnectException ce) {
		//	log.error("连接超时:{}", ce);
		} catch (Exception e) {
		//log.error("https请求异常:{}", e);
		}
		return jsonObject;
	}


}

第二种方法直接调用

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.HttpClientBuilder;
import org.junit.Test;

public class accessToken {
	@Test
	 public void textHttpClient() {
        //DefaulthttpClient已经过期,需要使用HttpClientBuilder来构建.
        //HttpClient httpClient = new DefaultHttpClient();
        HttpClient httpClient = HttpClientBuilder.create().build();

	        String url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=appid&secret=secret";
	        HttpGet request = new HttpGet(url);
	        try {
	            HttpResponse response = httpClient.execute(request);

	            InputStreamReader inputStreamReader = new InputStreamReader(response.getEntity().getContent());
	            BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
	            StringBuffer sb = new StringBuffer();
	            String line = "";
	            while ((line = bufferedReader.readLine()) != null) {
	                sb.append(line);
	            }
	            System.out.println(sb.toString());
                 
	            
	            
	            
	        } catch (IOException e) {
	            e.printStackTrace();
	        }
	    }
	 
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值