在java中,如何基于url创建HttpsURLConnection或HttpURLConnection?

我正在开发一个项目,我正在创建一个类来运行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类?

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

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

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

为了访问扩展方法(如仅在子类HttpsURLConnection定义的getCipherSuite() ,必须在instanceof之后使用getCipherSuite()

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