前两天在项目中利用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;
}
}