基本的に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
私はこれはちょっと些細なことだと思いますが、私はこれで私が間違っていることを理解していません...グーグルでそれを見て、コードは正しく見えますか?
どんなアイデアでも大歓迎です!
Java.net.URLConnection
を保持するか、代わりに Java.net.HttpURLConnection
にキャストしてください。どちらも、目的のタスクを適切に実行する方法を提供します。
技術的な問題とは無関係の副次的な発言:コード内でSun Java SE実装固有のクラスを明示的にインポート/使用する必要があるneverこれらは文書化されていないクラスであり、JVMのアップグレード時にコードが破損する可能性のある変更の対象となります。一方、別のブランドのJVMで実行すると、コードが破損する場合があります。
Update:誤ってインポートしたように見えるため、Window> Preferences> Java> Appearance>タイプFiltersおよびAddcom.Sun.*
およびSun.*
をリストに追加します。これにより、誤ってインポートすることはありません。
URLのプロトコルもhttpではなくhttpsにする必要があります。 URLを確認してください。
上記の問題は、2つの問題によってのみ発生します
http
を使用してURLを作成する文字列でhttps
を使用する次のような標準コンストラクタを使用してURLオブジェクトを作成する代わりに
URL wsURL = new URL(url);
使用する
Java.net.URL wsURL = new URL(null, url,new Sun.net.www.protocol.https.Handler());
この問題を解決します
「serverAddress」変数の値を確認します。 httpではなくhttpsである必要があります
インポートを確認し、使用する必要があります
Java.net.HttpURLConnection
または
javax.net.ssl.HttpsURLConnection
変更:
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();
ファイル全体を見ずに見分けるのは難しいですが、javax.net.ssl.HttpsURLConnectionが本当に必要なときにcom.Sun.net.ssl.HttpsURLConnectionをインポートしているように見えます。
私の場合、httpsUrlConnectionの呼び出し中にプロトコルとポートが正しくありませんでした。
ポートとプロトコルは、静的クラス変数として定義されました。そして、失敗したステップの前のステップは、httpUrlConnectionを呼び出していました。このメソッドはport/protocolを80/httpに変更しましたが、最後に/ httpsに戻しませんでした。そのため、httpsUrlConnectionが呼び出されましたが、まだhttp/80を使用していました。 httpUrlConnectionメソッドの最後でこれらをリセットすると、エラーは消えました。