【问题标题】:URL.openConnection returning different instance of HttpsURLConnection in different environmentsURL.openConnection 在不同的环境中返回不同的 HttpsURLConnection 实例
【发布时间】: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


    【解决方案1】:

    您尝试将其转换为 javax.net.ssl.HttpsURLConnection 是否有任何特殊原因?您可以使用基类 URLConnection 并执行操作。

    【讨论】:

    • 我正在使用 setRequestMethod 和 setRequestProperty 等方法,它们不适用于 URLConnection,但可用于 javax.net.ssl.HttpsURLConnection
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 2012-02-15
    • 1970-01-01
    • 1970-01-01
    • 2012-09-27
    • 2021-01-06
    相关资源
    最近更新 更多