在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(); }
- 如何使用Java EE 7 WebSockets实现对客户端的推送?
- 有没有办法保存下一次运行的JAVA JIT信息,这样我就不必每天都热身了?
- JAVA ArrayList:如何知道它是否包含String数组?
- 在Java中将单词转换为数字
- java中的java.sql.SQLException:org.apache.thrift.transport.TTransportException?
- 试图获取某种动态,无序列表以将订单发送到servlet
- Spring:嵌套exception是java.lang.NoClassDefFoundError:org / aopalliance / aop / Advice
- 如何在服务器模式下运行H2数据库?
- 处理Spring中过滤引发的exception