Android не может отправить запрос GET с HttpURLConnection - PullRequest
3 голосов
/ 21 октября 2010

Я пытаюсь использовать HttpURLConnection в своем приложении. Я установил метод запроса на «GET», но когда я пытаюсь получить выходной поток, метод меняется на «POST»! Я не уверен, что причина в этом, но мой сервер JSON (я использую JAX-RS) возвращает пустую страницу, когда я отправляю запрос, используя 'POST'.

Вот фрагмент моего кода:

// Create the connection
HttpURLConnection con = (HttpURLConnection) new URL(getUrl() + uriP).openConnection();
// Add cookies if necessary
if (cookies != null) {
  for (String cookie : cookies) {
    con.addRequestProperty("Cookie", cookie);
    Log.d("JSONServer", "Added cookie: " + cookie);
  }
}
con.setDoOutput(true);
con.setDoInput(true);
con.setUseCaches(false);
con.setRequestMethod("GET");
con.setConnectTimeout(20000);
// Add 'Accept' property in header otherwise JAX-RS/CXF will answer a XML stream
con.addRequestProperty("Accept", "application/json");

// Get the output stream
OutputStream os = con.getOutputStream();

// !!!!! HERE THE REQUEST METHOD HAS BEEN CHANGED !!!!!!
OutputStreamWriter wr = new OutputStreamWriter(os);
wr.write(requestP);
// Send the request
wr.flush();

Спасибо за ответ. Eric

Ответы [ 2 ]

8 голосов
/ 21 октября 2010

Но запросы GET должны не иметь содержимого ... записывая в выходной поток соединений, вы меняете природу запроса на POST. Библиотека весьма полезна для определения того, что вы делаете это ... Документ для getOutputStream явно заявляет "Метод запроса по умолчанию изменяется на" POST "при вызове этого метода."

Если вам нужно отправить данные на сервер в GET, тогда их нужно закодировать в параметрах URL обычным способом.

4 голосов
/ 27 февраля 2015

Удалите con.setDoOutput(true); из вашего кода.Тогда запрос веб-службы будет нормально работать с методом GET

HttpURLConnection по умолчанию использует метод GET .Он будет использовать POST , если был вызван setDoOutput(true).

Приведенный выше комментарий можно найти по следующему URL

Android HTTPURLConnection Class

...