今日有个网友问我,volley框架怎么使用https,由于他使用的是框架,改起来麻烦,于是自己早起解决方案来了:
搜到3个网址:
(1)http://stackoverflow.com/questions/17045795/making-a-https-request-using-android-volley
(2)http://ogrelab.ikratko.com/using-android-volley-with-self-signed-certificate/
(3)http://blog.csdn.net/ysh06201418/article/details/46860179
其中(3)说的很详细,他说volley默认就是支持https的(需要系统2.3以上),但是volley没有调用支持https的那个构造方法,如果你有源码,可以自行修改源码,如果你不想改源码,请参考(1):
拷贝这段代码:
public class HttpsTrustManager implements X509TrustManager {
private static TrustManager[] trustManagers;
private static final X509Certificate[] _AcceptedIssuers = new X509Certificate[]{};
@Override
public void checkClientTrusted(
java.security.cert.X509Certificate[] x509Certificates, String s)
throws java.security.cert.CertificateException {
}
@Override
public void checkServerTrusted(
java.security.cert.X509Certificate[] x509Certificates, String s)
throws java.security.cert.CertificateException {
}
public boolean isClientTrusted(X509Certificate[] chain) {
return true;
}
public boolean isServerTrusted(X509Certificate[] chain) {
return true;
}
@Override
public X509Certificate[] getAcceptedIssuers() {
return _AcceptedIssuers;
}
public static void allowAllSSL() {
HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() {
@Override
public boolean verify(String arg0, SSLSession arg1) {
return true;
}
});
SSLContext context = null;
if (trustManagers == null) {
trustManagers = new TrustManager[]{new HttpsTrustManager()};
}
try {
context = SSLContext.getInstance("TLS");
context.init(null, trustManagers, new SecureRandom());
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (KeyManagementException e) {
e.printStackTrace();
}
HttpsURLConnection.setDefaultSSLSocketFactory(context
.getSocketFactory());
}
}
里面的密码之类的配置写好,然后
Add HttpsTrustManager.allowAllSSL() before you make a https request:
(2)比较专业,看不下去了~