2010-06-14 32 views
29

我有一小段代碼基本上阻止了一個HTTP客戶端, 即它是POSTS請求,並與RESPONSE一起工作。只要HTTP是 就可以很好地理解。出於某種原因,我現在也必須支持 HTTPS。因此,這裏是簡要什麼,我爲了得到一個連接做開:使用java類HttpsURLConnection

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 

我想這是有點微不足道,但我就是不明白我的在這一個做錯了... 谷歌搜索它,並且代碼看起來是正確的 - 不是?

任何想法都讚賞!

+1

'com.sun.net.ssl.HttpsURLConnection'你爲什麼要投射到這個私人API? – McDowell 2010-06-14 14:28:37

+0

導入是由eclipse的自動解析創建的。我的哦。 – KB22 2010-06-14 14:32:07

回答

26

只需保留它java.net.URLConnection或將其轉換爲java.net.HttpURLConnection。兩者都提供了完成所需任務的方法。


A面此言無關的技術問題:你應該永遠明確導入/在你的代碼使用Sun的Java SE實現特定的類。這些是未公開的類,並且可能會在升級JVM時導致代碼中斷。另一方面,當您使用不同品牌的JVM運行代碼時,您的代碼也可能會中斷。


更新:因爲你似乎意外有進口的,去窗口>首選項>的Java>外觀>類型過濾添加com.sun.*sun.*到列表中。這樣你就不會無意中導入它們。 See screenshot

3

很難說沒有看到整個文件,但它看起來像你正在導入com.sun.net.ssl.HttpsURLConnection,當你真的想javax.net.ssl.HttpsURLConnection。

5

檢查你的進口,你應該使用

java.net.HttpURLConnection 

javax.net.ssl.HttpsURLConnection 
7

而不是創建一個URL對象使用標準的構造像

URL wsURL = new URL(url); 

使用

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

哪個可以解決這個問題

5

檢查你的「serverAddress」變量的值。它應該是https而不是http

19

你的url協議也應該是https而不是http。檢查你的網址。

13

上述問題僅由兩個問題

  1. 使用錯誤的進口
  2. 字符串中使用http引起你改用https
+1

使用http而不是https:yup - 這讓我。感謝你的回答 ! – monojohnny 2015-09-24 13:17:57

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

請添加解釋爲什麼這將解決問題 – user120242 2016-06-19 23:21:57

0

在我的情況下,協議和端口,同時調用HttpsURLConnection的是不正確的。

端口和協議被定義爲靜態類變量。而在失敗步驟之前的步驟是調用httpUrlConnection。該方法將端口/協議更改爲80/http,但最終沒有將其設置回/ https。所以儘管httpsUrlConnection被調用,但仍然使用http/80。一旦我在httpUrlConnection方法的末尾重置這些錯誤,錯誤就消失了。

相關問題