HttpURLConnection realiza siempre una solicitud GET en lugar de una solicitud POST a pesar de setDoOutput (true) y setRequestMethod ("POST")

Desde la actualización de Ice Cream Sandwich, mi solicitud de POST no funciona más. Antes de ICS, esto funciona bien:

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; 

He intentado establecer

 connection.setDoOutput(true); 

Pero no funciona. La respuesta del servidor es siempre un 405 (método no permitido) y el registro del servidor dice que era una solicitud GET.

El Android JavaDoc a setRequestMethod dice:

Este método sólo se puede llamar antes de realizar la conexión.

¿Significa que el método debe invocarse antes de url.openConnection ()? ¿Cómo debo crear una instancia de HttpURLConnection? Todos los ejemplos que he visto, lo hacen como se describió anteriormente.

Espero que alguien tenga una idea de por qué siempre envía una solicitud GET en lugar de un POST.

Gracias por adelantado.

 connection.setRequestMethod("POST"); connection.setDoOutput(false); 

En más de dos declaraciones simplemente coloque

 connection.setDoOutput(true) 

antes de

 connection.setRequestMethod("POST") 

declaración

Mi .htaccess tenía una regla de reescritura que redirigía www a http: //. Resultó mi código de Java funcionó muy bien! La regla de redireccionamiento / reescritura hizo que mi primera solicitud (POST) se transmitiera a http y por lo tanto "se convirtió" en un GET. Mi secuencia de comandos de PHP estaba escuchando POST solamente, y el hombre me rascó la cabeza hasta que encontré mi propio error con esa regla de redireccionamiento. Compruebe el suyo para este tipo de "problema".

Para mí, el establecimiento de setDoOutput o setRequestMethod primero no importa, cualquier orden funciona (API 23). Por el momento las cosas están en este orden:

 HttpURLConnection con = (HttpURLConnection) obj.openConnection(); con.setInstanceFollowRedirects(false); con.setUseCaches(false); con.setRequestMethod("POST"); con.setDoOutput(true); con.setRequestProperty("Content-Type",bla bla con.setRequestProperty("Accept-Charset", "UTF-8"); con.setRequestProperty("Content-Length", String.valueOf(PARAMETER_VARIABLE.getBytes().length)); con.setFixedLengthStreamingMode(PARAMETER_VARIABLE.getBytes().length); OutputStream os = con.getOutputStream(); os.write(PARAMETER_VARIABLE.getBytes()); os.flush(); os.close(); 
  • Cómo hacer los métodos en beanshell?
  • Formato doble para al menos un dígito significativo en Java / Android
  • Convertir JSONArray a Array de cadenas
  • Java.io.IOException: Error ejecutando exec () Directorio de trabajo: null Medio ambiente: null
  • Java, Android, Java EE
  • Compruebe si el valor entero ha aumentado?
  • Java.io.IOException: No queda espacio en el dispositivo Android
  • ¿Puedo ejecutar ejecutar una aplicación Android como una aplicación de escritorio independiente sin un emulador?
  • Las etiquetas HTML no funcionan dentro de strings.xml
  • ¿Cuál es el uso de la palabra clave final?
  • Limitación de Drag de ImageView en Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.