HttpURLConnection всегда выполняет запрос GET вместо запроса POST, несмотря на setDoOutput (true )и setRequestMethod («POST»)

После обновления до Ice Cream Sandwich мой POST-запрос больше не работает. До ICS это работало нормально :

try {
        final URL url = new URL("http://example.com/api/user");
        final HttpURLConnection connection = (HttpURLConnection) url
               .openConnection();
        connection.setRequestMethod("POST");
        connection.setDoOutput(false);
        connection.setDoInput(true);
        connection.setRequestProperty("Content-Length", "0");
        if (connection.getResponseCode() != HttpURLConnection.HTTP_OK) {
            Log.w(RestUploader.class.getSimpleName(), ": response code: " + connection.getResponseMessage());
        } else {
            final BufferedReader reader = new BufferedReader(
                    new InputStreamReader(connection.getInputStream()));
            final String line = reader.readLine();
            reader.close();
            return Long.parseLong(line);
        }
    } catch (final MalformedURLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (final ProtocolException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (final IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return -1;

. Я пытался установить

connection.setDoOutput(true);

, но это не работает. Ответ сервера всегда представляет собой 405 (Метод не разрешен ), а в журнале сервера указано, что это был запрос GET.

В Android JavaDoc для setRequestMethod указано:

Этот метод можно вызывать только до установления соединения.

Означает ли это, что метод должен вызываться до url.openConnection ()? Как создать экземпляр HttpURLConnection? Все примеры, которые я видел, делайте так, как описано выше.

Надеюсь, у кого-то есть идея, почему он всегда отправляет запрос GET вместо POST.

Заранее спасибо.

9
задан Cornelius 29 April 2012 в 21:40
поделиться