Использование класса java HttpsURLConnection
У меня есть небольшой фрагмент кода, который в основном имитирует HTTP-клиент,
т.е. запрос POSTS и работает с 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
Я думаю, это немного тривиально, но я просто не понимаю, что я делаю неправильно в этом...
В Googled это, и код выглядит просто - не?
любые идеи оценены!
Ответы
Ответ 1
Просто сохраните java.net.URLConnection
или переведите его в java.net.HttpURLConnection
. Оба предлагают методы для выполнения желаемой задачи как хорошего.
Боковое замечание, не связанное с технической проблемой: вы никогда не должны явно импортировать/использовать специфические классы реализации Sun Java SE в своем коде. Это недокументированные классы и могут быть изменены, что может привести к нарушению кода при обновлении JVM. С другой стороны, ваш код может также ломаться, когда вы запускаете его под другим брендом JVM.
Обновить: поскольку вы, похоже, случайно импортировали его, перейдите в список "Окно" > "Настройки" > "Ява" > "Внешний вид" > "Фильтры типов" и "Добавить" com.sun.*
и sun.*
. Таким образом, вы никогда не будете импортировать их случайно. Смотрите снимок экрана.
Ответ 2
Ваш протокол URL также должен быть https, а не http. Проверьте свой URL.
Ответ 3
Вышеупомянутая проблема вызвана только двумя проблемами
- Использование неправильного импорта
- Используя
http
в строке, которую вы создаете вместо этого URL, https
Ответ 4
Вместо создания объекта URL с использованием стандартного конструктора типа
URL wsURL = new URL(url);
Использование
java.net.URL wsURL = new URL(null, url,new sun.net.www.protocol.https.Handler());
которая решила бы эту проблему
Ответ 5
Проверьте свой импорт, вы должны использовать
java.net.HttpURLConnection
или
javax.net.ssl.HttpsURLConnection
Ответ 6
Проверьте значение переменной "serverAddress". Он должен https, а не http
Ответ 7
Трудно сказать, не видя весь файл, но похоже, что вы импортируете com.sun.net.ssl.HttpsURLConnection, когда вам действительно нравится javax.net.ssl.HttpsURLConnection.
Ответ 8
Изменение:
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();