web-dev-qa-db-ja.com

Javaで、URLに基​​づいてHttpsURLConnectionまたはHttpURLConnectionを作成するにはどうすればよいですか?

私はhttpクライアント要求を実行するためのクラスを作成しているプロジェクトに取り組んでいます(私のクラスはクライアントとして機能します)。 URLとリクエストメソッド(GET、POST、PUTなど)を受け取り、URLを解析して、httpsかhttpかに基づいてHttpsURLConnectionまたはHttpURLConnectionを開くことができるようにしたい(指定されたURLは常に正しい)。

私が次のことをした場合:

URLConnection conn = url.openConnection();

次に、httpとhttpsの両方を受け入れることができるURLConnectionが自動的に作成されますが、これを行うと、HttpsURLConnectionクラスまたはHttpURLConnectionクラスのみが持っているため、リクエストメソッド(GET、POSTなど)を設定する方法が見つかりません。 setRequestMethodメソッド。

私が次のようなことをした場合:

if(is_https)
    HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
else
    HttpURLConnection conn = (HttpURLConnection) url.openConnection();

次に、接続が作成されますが、ifブロックの外部で接続にアクセスできません。

これを行うことは可能ですか、それともApache httpclientクラスをあきらめて使用する必要がありますか?

13
Adam Plumb

HttpsURLConnection extends HttpUrlConnection なので、HttpsUrlConnectionは必要ありません。

HttpURLConnection conn = (HttpURLConnection) url.openConnection();
32
Rob Di Marco

_HttpsURLConnection extends HttpURLConnection_なので、connHttpsURLConnectionとして宣言できます。このようにして、共通インターフェース(setRequestMethod())にアクセスできます。

拡張メソッド(子クラスHttpsURLConnectionでのみ定義されているgetCipherSuite()など)にアクセスするには、instanceofの後にキャストを使用する必要があります。

_if (conn instanceof HttpsURLConnection) {
    HttpsURLConnection secured = (HttpsURLConnection) conn;
    String cipher = secured.getCipherSuite();
}
_
22
dfa