【发布时间】:2020-10-01 08:12:48
【问题描述】:
我正在尝试使用以下代码 sn-p 在 java 中发出 Https 请求:
1. java.net.URL urlObject = new java.net.URL("/*my https url*/");
2. javax.net.ssl.HttpsURLConnection HttpsURLConnection = (javax.net.ssl.HttpsURLConnection)urlObject.openConnection();
在第 2 行的运行时,urlObject.openConnection() 返回一个 sun.net.www.protocol.https.DelegateHttpsURLConnection 的实例,该实例被类型转换为 javax.net.ssl.HttpsURLConnection,这非常有效。
但是,在其中一种环境中,这不起作用并给出以下异常:
java.lang.ClassCastException: com.sun.net.ssl.internal.www.protocol.https.HttpsURLConnectionOldImpl cannot be cast to javax.net.ssl.HttpsURLConnection
这里在第 2 行 urlObject.openConnection() 返回一个 com.sun.net.ssl.internal.www.protocol.https.HttpsURLConnectionOldImpl 的实例,它不能被类型转换为 javax.net.ssl.HttpsURLConnection。
谁能帮我理解为什么urlObject.openConnection() 在不同的环境中返回不同类的不同实例。是否与依赖关系等有关。
附加信息:
- 我已阅读有关此问题的其他 stackoverflow 答案。我的目标是了解发生这种情况的根本原因,而其他答案没有充分传达。
- 我发现的一个解决方法是使用
com.sun.net.ssl.HttpsURLConnection con = (com.sun.net.ssl.HttpsURLConnection) urlObj.openConnection();代替第 2 行。但com.sun.net.ssl.HttpsURLConnection实际上已被弃用。 - 另一个类似的解决方法是使用 Http 而不是 Https,即使用
java.net.HttpURLConnection = (java.net.HttpURLConnection) urlObject.openConnection();...但这并不能回答我关于为什么问题实际发生的问题。 - 我正在使用 openJdk 8
【问题讨论】:
标签: java url networking httpurlconnection httpsurlconnection