使用 HttpURLConnection 请求 https

5 https android

我正在使用HttpURLConnection请求服务器。之前服务器使用的是http only protocolhttps协议,现在使用的是https协议。

我的问题是我没有使用HttpsURLConnection我的代码仍然工作正常,当我没有添加证书仍然工作时怎么可能。

下面是我的代码

//url is https://.......

URL m_url = new URL(p_url);
        m_httpConnection = (HttpURLConnection) m_url.openConnection();

        m_httpConnection.setConnectTimeout(CONNECTION_TIMEOUT);
        m_httpConnection.setReadTimeout(READ_TIMEOUT);
        System.setProperty("http.keepAlive", "false");
        m_httpConnection.setUseCaches(false);
        m_httpConnection.setDoOutput(p_isDoOutput);
        if (p_contentType != null)
        {
            m_httpConnection.setRequestProperty("content-type", p_contentType);
        }
        m_httpConnection.setRequestProperty("Accept-Encoding", "gzip,deflate,sdch");
Run Code Online (Sandbox Code Playgroud)

Wil*_*oom 6

HttpsURLConnectionextends HttpURLConnection,并且您的连接是两者的实例。当您调用openConnection()该函数时,实际上返回一个HttpsURLConnection. 但是,由于 https 对象扩展了 http 对象,因此您的连接仍然是HttpURLConnection. 这就是你的演员阵容发挥作用的原因。您也可以将连接强制转换为HttpsURLConnection无问题。

基本上是这样想的。openConnection()返回一个URLConnection不支持 HTTP 协议的对象。然而,正如您在代码中似乎意识到的那样,这URLConnection实际上是HttpURLConnection支持 HTTP 协议的。从同样的意义上说,您HttpURLConnection实际上是HttpsURLConnection支持 SSL/TLS 的。

  • @AndroidWeblineindia我从来没有听说过SSL客户端需要提供证书。我的理解是服务器提供证书/密钥对,客户端对其进行身份验证。 (3认同)