【问题标题】:Using java class HttpsURLConnection使用 java 类 HttpsURLConnection
【发布时间】:2011-03-03 13:19:00
【问题描述】:

我有一小段代码基本上实现了 HTTP 客户端, 即它发布请求并与重新响应一起使用。只要 HTTP 是 相关的一切运作良好。出于某种原因,我现在必须支持 HTTPS 也是。所以这里简要介绍一下我为了打开连接所做的工作:

 URL url = new URL(serverAddress);
 HttpsURLConnection httpsConn = (HttpsURLConnection) url.openConnection();

这失败了,说明:

sun.net.www.protocol.https.HttpsURLConnectionImpl cannot be cast to com.sun.net.ssl.HttpsURLConnection

我想这有点微不足道,但我只是不明白我在这个中做错了什么...... 谷歌了一下,代码看起来正确 - 不是吗?

任何想法都值得赞赏!

【问题讨论】:

  • com.sun.net.ssl.HttpsURLConnection 为什么要投射到这个私有 API?
  • 导入是由 eclipse 的自动解析创建的。我的天。

标签: java https


【解决方案1】:

只需保留 java.net.URLConnection 或将其转换为 java.net.HttpURLConnection。两者都提供了完成所需任务的方法。


与技术问题无关的附注:您应该永远在代码中显式导入/使用 Sun Java SE 实现特定的类。这些是未记录的类,并且在升级 JVM 时可能会导致代码中断。另一方面,当您在不同品牌的 JVM 上运行代码时,您的代码也可能会中断。


更新:由于您似乎不小心导入了它,请转到 Window > Preferences > Java > Appearance > Type FiltersAdd @ 987654327@ 和 sun.* 到列表中。这样您就不会意外地导入它们:

【讨论】:

    【解决方案2】:

    在我的情况下,调用 httpsUrlConnection 时协议和端口不正确。

    端口和协议被定义为静态类变量。失败步骤之前的步骤是调用 httpUrlConnection。该方法将端口/协议更改为 80/http,但最后没有将其设置回 /https。因此,即使调用了 httpsUrlConnection,它仍然使用的是 http/80。一旦我在 httpUrlConnection 方法的末尾重置了这些,错误就消失了。

    【讨论】:

      【解决方案3】:

      更改:

      import javax.net.ssl.HttpsURLConnection;
      

      URL url = new URL(serverAddress);
      HttpsURLConnection httpsConn = (HttpsURLConnection) url.openConnection();
      

      更改为:

      import java.net.HttpURLConnection;
      

      URL url = new URL(serverAddress);
      HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
      

      【讨论】:

      • 请说明为什么这会解决问题
      【解决方案4】:

      上述问题仅由两个问题引起

      1. 使用错误的导入
      2. 在您创建 url 的字符串中使用 http 而不是 https

      【讨论】:

      • 使用 http 而不是 https :是的 - 这让我明白了。感谢您的回答!
      【解决方案5】:

      您的 url 协议也应该是 https 而不是 http。检查你的网址。

      【讨论】:

        【解决方案6】:

        检查“serverAddress”变量的值。它应该是 https 而不是 http

        【讨论】:

          【解决方案7】:

          而不是使用标准构造函数创建 URL 对象,例如

          URL wsURL = new URL(url);
          

          使用

          java.net.URL wsURL = new URL(null, url,new sun.net.www.protocol.https.Handler());
          

          解决这个问题

          【讨论】:

            【解决方案8】:

            检查你的导入,你应该使用

            java.net.HttpURLConnection
            

            javax.net.ssl.HttpsURLConnection
            

            【讨论】:

              【解决方案9】:

              如果不查看整个文件就很难判断,但是当您确实需要 javax.net.ssl.HttpsURLConnection 时,看起来您正在导入 com.sun.net.ssl.HttpsURLConnection。

              【讨论】:

                猜你喜欢
                • 2011-10-02
                • 2016-03-28
                • 2022-07-18
                • 2017-05-29
                • 1970-01-01
                • 2016-11-05
                • 1970-01-01
                • 2015-01-20
                • 2012-01-09
                相关资源
                最近更新 更多