http发送get请求报javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorExcepti

前两天在项目中利用http发送get请求报javax.net.ssl.SSLHandshakeException: 这个错误

其主要原因是安全证书方面的问题。直接上解决方法代码
最近小伙伴们发现有的文件没有。我对应整理了一下。更新上去了。


```java
 /**
     *  http get请求 请求参数在url后面拼接
     *  @throws Exception
     */
    public static String sendRequest(String requestUrl,Map<String,String> header) throws Exception{
        HttpsURLConnection conn = null;
        InputStream input = null;
        BufferedReader br = null;
        StringBuffer buffer = null;
        try {
            SSLContext sc = SSLContext.getInstance("SSL");
            sc.init(null, new TrustManager[] { new TrustAnyTrustManager() },new java.security.SecureRandom());
            HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());

            URL url = new URL(requestUrl);
            conn = (HttpsURLConnection) url.openConnection();
            conn.setSSLSocketFactory(sc.getSocketFactory());
            conn.setHostnameVerifier(new TrustAnyHostnameVerifier());

            conn.setDoOutput(false);
            conn.setDoInput(true);
            conn.setUseCaches(false);
            conn.setConnectTimeout(1000 * 100);
            conn.setReadTimeout(1000 * 100);
            conn.setRequestMethod("GET");
            conn.setRequestProperty("Accept", "*/*");
            conn.setRequestProperty("Connection", "keep-alive");
            conn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");
            conn.setRequestProperty("Charset", "UTF-8");
			conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
			
			//添加header
			if(header != null){
				for(Map.Entry<String, String> entry : header.entrySet()){
				    String mapKey = entry.getKey();
				    String mapValue = entry.getValue();
				    conn.setRequestProperty(mapKey, mapValue);
				}
			}
            conn.connect();
            // 读取服务器端返回的内容
            System.out.println("======================响应体=========================");
            System.out.println("ResponseCode:" + conn.getResponseCode() + ",ResponseMessage:" + conn.getResponseMessage());
            if(conn.getResponseCode()==200){
                input = conn.getInputStream();
            }else{
                input = conn.getErrorStream();
            }
            br = new BufferedReader(new InputStreamReader(input, "UTF-8"));
            buffer = new StringBuffer();
            String line = null;
            while ((line = br.readLine()) != null) {
                buffer.append(line);
            }
            System.out.println("返回报文:" + buffer.toString());
        } catch (Exception e) {
            log.error(e.getMessage(), e);
            throw new Exception(e);
        } finally {
            try {
                if (conn != null) {
                    conn.disconnect();
                    conn = null;
                }
                if (br != null) {
                    br.close();
                    br = null;
                }
            } catch (IOException ex) {
                log.error(ex.getMessage(), ex);
                throw new Exception(ex);
            }
        }
        return buffer.toString();
    }

第二部分 TrustAnyHostnameVerifier 类

import javax.net.ssl.X509TrustManager;

/**
 * Created by Administrator on 2019/7/8.
 */
public class TrustAnyTrustManager implements X509TrustManager {
    public  void checkClientTrusted(java.security.cert.X509Certificate[] var1, String var2) throws java.security.cert.CertificateException{

    }

    public void checkServerTrusted(java.security.cert.X509Certificate[] var1, String var2) throws java.security.cert.CertificateException{

    }

    public java.security.cert.X509Certificate[] getAcceptedIssuers(){
        return null;
    }
}

第三部分 TrustAnyHostnameVerifier 类

import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.SSLSession;

/**
 * Created by Administrator on 2019/7/8.
 */
public class TrustAnyHostnameVerifier implements HostnameVerifier {
    public boolean verify(String hname, SSLSession session) {
        return true;
    }
}
  • 5
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值