从https下载文件,本文采取的方法是默认所有https请求都是安全的(让JRE相信所有的证书和对系统的域名和证书域名),也就是所有的链接都能够访问到。
import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import javax.net.ssl.*;
import org.apache.commons.lang.StringUtils;
public class MyX509TrustManager implements X509TrustManager {
/**
处理https GET/POST请求 请求地址、请求方法、参数
*/
public static String httpsRequest(String requestUrl, String requestMethod,
String outputStr) {
StringBuffer buffer = null;
try {
// 创建SSLContext
SSLContext sslContext = SSLContext.getInstance("SSL");
TrustManager[] tm = {
new MyX509TrustManager() };
// 初始化
sslContext.init(null, tm, new java.security.SecureRandom());
;
// 获取SSLSocketFactory对象
SSLSocketFactory ssf = sslContext.getSocketFactory();
// url对象
URL url = new URL(requestUrl);
// 打开连接
HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
/**
* 这一步的原因: 当访问HTTPS的网址。您可能已经安装了服务器证书到您的JRE的keystore
* 但是服务器的名称与证书实际域名不相等。这通常发生在你使用的是非标准网上签发的证书。
*
* 解决方法:让JRE相信所有的证书和对系统的域名和证书域名。
*
* 如果少了这一步会报错:java.io.IOException: HTTPS hostname wrong: should be localhost
*/
conn.setHostnameVerifier(new MyX509TrustManager().new TrustAnyHostnameVerifier());
// 设置一些参数
conn.setDoOutput(true);
conn<