HttpURLConnection отправляет запрос POST, даже если httpCon.setRequestMethod ("GET");установлено - PullRequest
28 голосов
/ 06 января 2012

Вот мой код:

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 Ошибка сервера

Я открываю свой httpConvar, и то, что я вижу:

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

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

1 Ответ

62 голосов
/ 06 января 2012

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.

...