13

我正在做一个项目,我正在创建一个类来运行 http 客户端请求(我的类充当客户端)。它接受一个 url 和一个请求方法(GET、POST、PUT 等),我希望能够解析 URL 并根据它是 https 还是 http 打开 HttpsURLConnection 或 HttpURLConnection(假设给定的 url 将始终是正确的)。

如果我执行以下操作:

URLConnection conn = url.openConnection();

然后这将自动创建一个可以接受 http 和 https 的 URLConnection,但是如果我这样做,那么我找不到任何方法来设置请求方法(GET、POST 等),因为只有 HttpsURLConnection 或 HttpURLConnection 类具有设置请求方法方法。

如果我执行以下操作:

if(is_https)
    HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
else
    HttpURLConnection conn = (HttpURLConnection) url.openConnection();

然后创建连接,但我无法在 if 块之外访问它们。

是否可以这样做,或者我应该放弃并使用 apache httpclient 类?

4

2 回答 2

35

HttpsURLConnection扩展了 HttpUrlConnection,所以你不需要 HttpsUrlConnection,你可以这样做

HttpURLConnection conn = (HttpURLConnection) url.openConnection();
于 2009-06-03T14:19:28.677 回答
22

因为HttpsURLConnection extends HttpURLConnection你可以声明connHttpsURLConnection. 通过这种方式,您可以访问公共接口 ( setRequestMethod())。

为了访问扩展方法(例如getCipherSuite(),仅在子类中定义),您必须在instanceofHttpsURLConnection之后使用强制转换:

if (conn instanceof HttpsURLConnection) {
    HttpsURLConnection secured = (HttpsURLConnection) conn;
    String cipher = secured.getCipherSuite();
}
于 2009-06-03T14:24:33.160 回答