web-dev-qa-db-ja.com

Java class HttpsURLConnectionを使用する

基本的にHTTPクライアントを強制する小さなコード、つまり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

私はこれはちょっと些細なことだと思いますが、私はこれで私が間違っていることを理解していません...グーグルでそれを見て、コードは正しく見えますか?

どんなアイデアでも大歓迎です!

32
KB22

Java.net.URLConnection を保持するか、代わりに Java.net.HttpURLConnection にキャストしてください。どちらも、目的のタスクを適切に実行する方法を提供します。


技術的な問題とは無関係の副次的な発言:コード内でSun Java SE実装固有のクラスを明示的にインポート/使用する必要があるneverこれらは文書化されていないクラスであり、JVMのアップグレード時にコードが破損する可能性のある変更の対象となります。一方、別のブランドのJVMで実行すると、コードが破損する場合があります。


Update:誤ってインポートしたように見えるため、Window> Preferences> Java> Appearance>タイプFiltersおよびAddcom.Sun.*およびSun.*をリストに追加します。これにより、誤ってインポートすることはありません。

enter image description here

28
BalusC

URLのプロトコルもhttpではなくhttpsにする必要があります。 URLを確認してください。

19
Salman Zafar

上記の問題は、2つの問題によってのみ発生します

  1. 間違ったインポートを使用する
  2. 代わりにhttpを使用してURLを作成する文字列でhttpsを使用する
13
user2505915

次のような標準コンストラクタを使用してURLオブジェクトを作成する代わりに

URL wsURL = new URL(url);

使用する

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

この問題を解決します

7
jsaevsah

「serverAddress」変数の値を確認します。 httpではなくhttpsである必要があります

5
Dayanand Fagare

インポートを確認し、使用する必要があります

Java.net.HttpURLConnection

または

javax.net.ssl.HttpsURLConnection
5
DaveJohnston

変更:

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
Geanluca

ファイル全体を見ずに見分けるのは難しいですが、javax.net.ssl.HttpsURLConnectionが本当に必要なときにcom.Sun.net.ssl.HttpsURLConnectionをインポートしているように見えます。

3
Mike Baranczak

私の場合、httpsUrlConnectionの呼び出し中にプロトコルとポートが正しくありませんでした。

ポートとプロトコルは、静的クラス変数として定義されました。そして、失敗したステップの前のステップは、httpUrlConnectionを呼び出していました。このメソッドはport/protocolを80/httpに変更しましたが、最後に/ httpsに戻しませんでした。そのため、httpsUrlConnectionが呼び出されましたが、まだhttp/80を使用していました。 httpUrlConnectionメソッドの最後でこれらをリセットすると、エラーは消えました。

0
AJC