2010-06-14 25 views
29

Tôi có một đoạn mã nhỏ về cơ bản sẽ giới thiệu một HTTP-Client, tức là yêu cầu POSTS và hoạt động với RESPONSE. Miễn là HTTP là mọi thứ liên tục hoạt động tốt. Vì một lý do nào đó bây giờ tôi cũng phải hỗ trợ HTTPS. Vì vậy, đây là một thời gian ngắn những gì tôi làm để có được một kết nối mở:Sử dụng lớp java HttpsURLConnection

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

này thất bại, trong đó nêu:

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

Tôi đoán đây là kinda tầm thường, nhưng tôi chỉ không nhận được những gì tôi đang làm sai trong cái này ... Googled nó, và mã chỉ có vẻ đúng - không?

bất kỳ ý tưởng nào được đánh giá cao!

+1

'com.sun.net.ssl.HttpsURLConnection' Tại sao bạn truyền tới API riêng tư này? – McDowell

+0

quá trình nhập đã được tạo bằng giải pháp tự động của nhật thực. my d'oh. – KB22

Trả lời

26

Chỉ cần giữ nó java.net.URLConnection hoặc truyền tới java.net.HttpURLConnection để thay thế. Cả hai đều cung cấp các phương thức để thực hiện nhiệm vụ mong muốn là tốt.


Một bên nhận xét không liên quan đến vấn đề kỹ thuật: bạn nên bao giờ rõ ràng nhập khẩu/sử dụng Sun Java SE lớp cụ thể thực hiện trong mã của bạn. Đó là các lớp không có giấy tờ và có thể thay đổi, điều này có thể làm cho mã của bạn bị hỏng khi bạn nâng cấp JVM. Mặt khác, mã của bạn cũng có thể bị hỏng khi bạn chạy nó tại một JVM thương hiệu khác.


Cập nhật: kể từ khi bạn dường như vô tình đã nhập khẩu nó, hãy vào Window> Preferences> Java> Giao diện> Gõ lọcThêmcom.sun.*sun.* vào danh sách. Bằng cách này bạn sẽ không bao giờ nhập chúng vô tình. See screenshot.

3

Khó nói mà không thấy toàn bộ tệp, nhưng có vẻ như bạn đang nhập com.sun.net.ssl.HttpsURLKết nối khi bạn thực sự muốn javax.net.ssl.HttpsURLConnection.

5

Kiểm tra hàng nhập khẩu của bạn, bạn nên sử dụng

java.net.HttpURLConnection 

hoặc

javax.net.ssl.HttpsURLConnection 
7

Thay vì tạo ra một đối tượng URL sử dụng constructor tiêu chuẩn như

URL wsURL = new URL(url); 

Sử dụng

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

sẽ giải quyết vấn đề này

5

Kiểm tra giá trị của biến "serverAddress" của bạn. Cần https và không http

19

Giao thức url của bạn cũng phải là https và không phải http. Kiểm tra url của bạn.

13

Vấn đề trên được chỉ gây ra bởi hai vấn đề

  1. Sử dụng sai nhập khẩu
  2. Sử dụng http trong chuỗi bạn tạo url việc sử dụng thay vì https
+1

sử dụng http thay vì https: yup - đã nhận được tôi. Cảm ơn câu trả lời! – monojohnny

3

Thay đổi:

import javax.net.ssl.HttpsURLConnection; 

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

Thay đổi Để:

import java.net.HttpURLConnection; 

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

Vui lòng thêm giải thích tại sao điều này sẽ khắc phục được sự cố – user120242

0

Trong trường hợp của tôi, giao thức và cổng không chính xác trong khi viện dẫn httpsUrlConnection.

Cổng và giao thức được định nghĩa là biến lớp tĩnh. Và bước trước bước không thành công, đã gọi một httpUrlConnection. Phương thức đó đã thay đổi cổng/giao thức thành 80/http, nhưng không đặt nó trở lại/https ở cuối. Vì vậy, eventhough httpsUrlConnection đã được gọi, nó vẫn đang sử dụng http/80. Sau khi tôi đặt lại những người ở cuối phương thức httpUrlConnection, lỗi đã biến mất.

Các vấn đề liên quan