Arc*_*rci 26 android httpurlconnection
如果我尝试使用HttpURLConnection和连接到"https"有什么区别HttpsURLConnection?
我能够使用两者连接到"https" HttpURLConnection,HttpsURLConnection所以我很困惑.如果我使用的话,我想我只能建立与"https"的连接HttpsURLConnection?
以下是我的一些问题:
SSLSocketFactory与HostnameVerifier我HttpURLConnection同时连接的"https"开头,怎么SSLSocketFactory和HostnameVerifier我使用的?Jer*_*rds 21
我刚刚编写了一些代码作为测试(参见下面的所有方法).最终发生的是URL.openConnection()调用将返回一个libcore.net.http.HttpsURLConnectionImpl类.
这是HttpsURLConnection的实现,但HttpsURLConnection继承自HttpURLConnection.所以你看到多态性在起作用.
进一步研究调试器,看来该类正在使用默认的工厂方法.
hostnameVerifier = javax.net.ssl.DefaultHostnameVerifier
sslSocketFactory = org.apache.harmony.xnet.provider.jsse.OpenSSLSocketFactoryImpl
基于此,看起来正在使用默认行为.我不知道这是否意味着你是否相信一切,但你肯定是在建立一个HTTPS连接.
文档有点提示连接将自动信任众所周知但不是自签名的CA. (见下文)我没有测试这个,但他们有关于如何在这里完成的示例代码.
如果应用程序想要信任不属于系统的证书颁发机构(CA)证书,则应通过HttpsURLConnection上设置的SSLSocketFactory指定自己的X509TrustManager.
Runnable r = new Runnable() {
public void run() {
try {
URL test = new URL("https://www.google.com/");
HttpURLConnection connection = (HttpURLConnection) test.openConnection();
InputStream is = connection.getInputStream();
StringWriter sw = new StringWriter();
String value = new java.util.Scanner(is).useDelimiter("\\A").next();
Log.w("GOOGLE", value);
} catch(Exception e) {
Log.e("Test", e.getMessage());
}
}
};
Thread t = new Thread(r);
t.start();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15712 次 |
| 最近记录: |