我有一小段代码基本上要求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
我想这有点微不足道,但我只是不知道我在这个问题上做错了什么...... 谷歌搜索它,代码看起来正确 - 不是吗?
任何想法都表示赞赏!
答案 0 :(得分:28)
请保持java.net.URLConnection
或将其转换为java.net.HttpURLConnection
。两者都提供了完成所需任务的方法。
与技术问题无关的侧面评论:您应该从不显式导入/使用代码中的Sun Java SE实现特定类。这些是未记录的类,并且可能会在升级JVM时导致代码中断。另一方面,当您在不同品牌的JVM上运行代码时,您的代码也可能会中断。
更新:由于您似乎意外导入了它,请转到 Window>偏好> Java>外观>在列表中键入过滤器和添加 com.sun.*
和sun.*
。这样你就不会意外地导入它们:
答案 1 :(得分:19)
您的网址协议也应该是https而不是http。检查你的网址。
答案 2 :(得分:13)
上述问题仅由两个问题引起
http
,您可以使用https
答案 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方法结束时重置那些,错误就消失了。