使用java类HttpsURLConnection

时间:2010-06-14 14:24:25

标签: java https

我有一小段代码基本上要求HTTP-Client, 即它的POSTS请求并与re RESPONSE一起工作。只要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

我想这有点微不足道,但我只是不知道我在这个问题上做错了什么...... 谷歌搜索它,代码看起来正确 - 不是吗?

任何想法都表示赞赏!

9 个答案:

答案 0 :(得分:28)

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


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


更新:由于您似乎意外导入了它,请转到 Window>偏好> Java>外观>在列表中键入过滤器添加 com.sun.*sun.*。这样你就不会意外地导入它们:

enter image description here

答案 1 :(得分:19)

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

答案 2 :(得分:13)

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

  1. 使用错误的导入
  2. 在字符串中使用http,您可以使用https
  3. 创建网址

答案 3 :(得分:7)

而不是使用标准构造函数(如

)创建URL对象
URL wsURL = new URL(url);

使用

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

可以解决这个问题

答案 4 :(得分:5)

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

java.net.HttpURLConnection

javax.net.ssl.HttpsURLConnection

答案 5 :(得分:5)

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

答案 6 :(得分:4)

更改:

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();

答案 7 :(得分:3)

很难说没有看到整个文件,但是当你真的想要javax.net.ssl.HttpsURLConnection时,看起来你正在导入com.sun.net.ssl.HttpsURLConnection。

答案 8 :(得分:0)

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

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