13

私は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クラスをあきらめて使用する必要がありますか?

4

2 に答える 2

35

HttpsURLConnectionHttpUrlConnectionを拡張するため、HttpsUrlConnectionは必要ありません。

HttpURLConnection conn = (HttpURLConnection) url.openConnection();
于 2009-06-03T14:19:28.677 に答える
22

としてHttpsURLConnection extends HttpURLConnection宣言できるので。このようにして、共通インターフェース()にアクセスできます。connHttpsURLConnectionsetRequestMethod()

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

if (conn instanceof HttpsURLConnection) {
    HttpsURLConnection secured = (HttpsURLConnection) conn;
    String cipher = secured.getCipherSuite();
}
于 2009-06-03T14:24:33.160 に答える