在java中,如何根据url创建HttpsURLConnection或HttpURLConnection?

时间:2009-06-03 14:12:55

标签: java urlconnection

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

如果我执行以下操作:

URLConnection conn = url.openConnection();

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

如果我执行以下操作:

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

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

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

2 个答案:

答案 0 :(得分:31)

HttpsURLConnection扩展HttpUrlConnection,所以你不需要HttpsUrlConnection,你可以做到

HttpURLConnection conn = (HttpURLConnection) url.openConnection();

答案 1 :(得分:21)

HttpsURLConnection extends HttpURLConnection起,您可以将conn声明为HttpsURLConnection。通过这种方式,您可以访问公共接口(setRequestMethod())。

要访问扩展方法(例如仅在子类getCipherSuite()中定义的HttpsURLConnection),您必须在 instanceof 后使用强制转换:

if (conn instanceof HttpsURLConnection) {
    HttpsURLConnection secured = (HttpsURLConnection) conn;
    String cipher = secured.getCipherSuite();
}