直接上代码:
mRequestQueue = Volley.newRequestQueue(mCtx.getApplicationContext(),
new HurlStack(null, newSslSocketFactory()));
详见这篇文章,这里不在重复.
但仍有报错,
java.io.IOException: Hostname ‘...‘ was not verified
证书的Hostname与实际的不匹配,历史原因不能修改证书。
别外的解决方法是让Https忽略对Hostname的Verify。但对Volley来说尝试了多种方法都不行。
之前一直使用的是apache的SSLSocketFactory,org.apache.http.conn.ssl.SSLSocketFactory
可以调用 setHostnameVerifier(SSLSocketFactory.STRICT_HOSTNAME_VERIFIER)来进行设置。
但Vollley中HurlStack使用的是 javax.net.ssl.SSLSocketFactory,没有找到可以进行设置的地方。
无耐之下,只能修改Volley的原代码,基于官方6.11日版本:
修改com.android.volley.toolbox.HurlStack的openConnection()
编译并导入测试可以正常通信,如相关资料所说,此法仅用于测试,正式使用还是很危险的。
// use caller-provided custom SslSocketFactory, if any, for HTTPS if ("https".equals(url.getProtocol()) && mSslSocketFactory != null) { ((HttpsURLConnection)connection).setHostnameVerifier(new HostnameVerifier() { @Override public boolean verify(String arg0, SSLSession arg1) { return true; } }); ((HttpsURLConnection)connection).setSSLSocketFactory(mSslSocketFactory); }