В java, как создать HttpsURLConnection или HttpURLConnection на основе URL?

Я работаю над проектом, в котором я создаю класс для запуска клиентских запросов http (мой класс действует как клиент). Он принимает URL-адрес и метод запроса (GET, POST, PUT и т.д.), И я хочу иметь возможность анализировать URL-адрес и открывать HttpsURLConnection или HttpURLConnection на основе того, является ли это https или http (предполагается, что данные URL всегда будут правильно).

Если я делаю следующее:

URLConnection conn = url.openConnection();

Затем это автоматически создаст URLConnection, которое может принимать как http, так и https, но если я это сделаю, я не могу найти способ установить метод запроса (GET, POST и т.д.), поскольку только HttpsURLConnection или HttpURLConnection классы имеют метод setRequestMethod.

Если я делаю что-то вроде следующего:

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

Затем создаются соединения, но я не могу получить к ним доступ за пределами блоков if.

Возможно ли это сделать, или я просто должен отказаться и использовать классы apache aptclient?

Ответ 1

HttpsURLConnection extends HttpUrlConnection, поэтому вам не нужно HttpsUrlConnection, вы можете просто сделать

HttpURLConnection conn = (HttpURLConnection) url.openConnection();

Ответ 2

так как HttpsURLConnection extends HttpURLConnection вы можете объявить conn как HttpsURLConnection. Таким образом, вы можете получить доступ к общему интерфейсу (setRequestMethod()).

Чтобы получить доступ к методам расширения (например, getCipherSuite(), определенным только в дочернем классе HttpsURLConnection), вы должны использовать бросок после instanceof:

if (conn instanceof HttpsURLConnection) {
    HttpsURLConnection secured = (HttpsURLConnection) conn;
    String cipher = secured.getCipherSuite();
}