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
- Integración de Stripe en Android Studio
- Cómo crear una animación de "relleno" en Android
- Campo no inyectado en el proyecto Android Dagger
- Abrir URL en webView en android
- Retrofit 2.0 cómo eliminar?
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.
- Iniciar y detener una notificación del receptor de emisión
- Andengine FPS bajo en ciertos teléfonos
- ¿Cómo puedo contar el número de archivos con una extensión específica en Android?
- Imagebutton establecer el tamaño de la imagen
- Cómo comparar el tiempo en java / android (dado entrada en cadenas)?
- Uso de una base de datos SQLite en Libgdx
- Utilizando gps en un mapa estático en android?
- RxJava y Sqlbrite - qué operador utilizar
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();
- Comunicación Android a PC
- Imágenes _display_name se cambia en db externo en com.android.provider.media/external.db