Подтвердить что ты не робот

HttpURLConnection отправляет запрос POST, хотя httpCon.setRequestMethod( "GET" ); установлен

Вот мой код:

String addr = "http://172.26.41.18:8080/domain/list";

URL url = new URL(addr);
HttpURLConnection httpCon = (HttpURLConnection) url.openConnection();
httpCon.setDoOutput(true);
httpCon.setDoInput(true);
httpCon.setUseCaches(false);
httpCon.setAllowUserInteraction(false);
httpCon.setRequestMethod("GET");
httpCon.addRequestProperty("Authorization", "Basic YWRtaW4fYFgjkl5463");

httpCon.connect();

OutputStreamWriter out = new OutputStreamWriter(httpCon.getOutputStream());

System.out.println(httpCon.getResponseCode());
System.out.println(httpCon.getResponseMessage());

out.close();

Что я вижу в ответ:

500 Ошибка сервера

Я открываю var httpCon и вижу:

POST/rest/platform/domain/list HTTP/1.1

Почему он установлен в POST, хотя я использовал httpCon.setRequestMethod("GET");, чтобы установить его в GET?

4b9b3361

Ответ 1

httpCon.setDoOutput(true); неявно задает метод запроса POST, потому что это метод по умолчанию, когда вы хотите отправить тело запроса.

Если вы хотите использовать GET, удалите эту строку и удалите строку OutputStreamWriter out = new OutputStreamWriter(httpCon.getOutputStream());. Вам не нужно отправлять тело запроса для запросов GET.

Для простого запроса GET необходимо выполнить следующее:

String addr = "http://172.26.41.18:8080/domain/list";
URL url = new URL(addr);
HttpURLConnection httpCon = (HttpURLConnection) url.openConnection();
httpCon.setUseCaches(false);
httpCon.setAllowUserInteraction(false);
httpCon.addRequestProperty("Authorization", "Basic YWRtaW4fYFgjkl5463");
System.out.println(httpCon.getResponseCode());
System.out.println(httpCon.getResponseMessage());

См. также:


Несвязанный к конкретной проблеме, парольная часть вашего значения заголовка Authorization, похоже, не соответствует требованиям Base64. Возможно, это скремблировалось, потому что оно было экзаменом, но даже если бы я не исправил подход к кодировке Base64.