私は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クラスをあきらめて使用する必要がありますか?
HttpsURLConnection extends HttpUrlConnection なので、HttpsUrlConnectionは必要ありません。
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
_HttpsURLConnection extends HttpURLConnection
_なので、conn
をHttpsURLConnection
として宣言できます。このようにして、共通インターフェース(setRequestMethod()
)にアクセスできます。
拡張メソッド(子クラスHttpsURLConnection
でのみ定義されているgetCipherSuite()
など)にアクセスするには、instanceofの後にキャストを使用する必要があります。
_if (conn instanceof HttpsURLConnection) {
HttpsURLConnection secured = (HttpsURLConnection) conn;
String cipher = secured.getCipherSuite();
}
_