Estoy usando este código con éxito para enviar HTTP
solicitudes con algunos parámetros a través del GET
método
void sendRequest(String request)
{
// i.e.: request = "http://example.com/index.php?param1=a¶m2=b¶m3=c";
URL url = new URL(request);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setDoOutput(true);
connection.setInstanceFollowRedirects(false);
connection.setRequestMethod("GET");
connection.setRequestProperty("Content-Type", "text/plain");
connection.setRequestProperty("charset", "utf-8");
connection.connect();
}
Ahora es posible que deba enviar los parámetros (es decir, param1, param2, param3) a través del POST
método porque son muy largos. Estaba pensando en agregar un parámetro adicional a ese método (es decir, String httpMethod).
¿Cómo puedo cambiar el código anterior lo menos posible para poder enviar parámetros a través de GET
o POST
?
Esperaba que eso cambiara
connection.setRequestMethod("GET");
a
connection.setRequestMethod("POST");
habría hecho el truco, pero los parámetros aún se envían a través del método GET.
¿ HttpURLConnection
Tiene algún método que pueda ayudar? ¿Hay alguna construcción útil de Java?
Cualquier ayuda sería muy apreciada.
http://example.com/index.php
)Respuestas:
En una solicitud GET, los parámetros se envían como parte de la URL.
En una solicitud POST, los parámetros se envían como un cuerpo de la solicitud, después de los encabezados.
Para hacer una POST con HttpURLConnection, debe escribir los parámetros en la conexión después de haberla abierto.
Este código debería ayudarlo a comenzar:
fuente
byte[] data = urlParameters.getBytes(Charset.forName("UTF-8"))
:).conn.getResponseCode()
o de loconn.getInputStream()
contrario no enviará ningún dato.Aquí hay un ejemplo simple que envía un formulario y luego voltea la página de resultados
System.out
. Cambie la URL y los parámetros POST según corresponda, por supuesto:Si desea que el resultado se
String
imprima directamente en lugar de hacerlo:fuente
UTF-8
, lo cual no siempre es el caso. Para recuperar el juego de caracteres, uno debe obtener el encabezadoContent-Type
y analizar el juego de caracteres de eso. Cuando esa cabecera no está disponible, utilice el estándar http:ISO-8859-1
.<meta charset="...">
o<meta http-equiv="Content-Type" content="...">
cabecera dentro del documento que se deben analizar.response += line;
es fenomenalmente lento y come saltos de línea. Agregué a la respuesta un ejemplo de cómo obtener una respuesta de cadena.No pude obtener el ejemplo de Alan para hacer la publicación, así que terminé con esto:
fuente
Me resulta
HttpURLConnection
muy engorroso de usar. Y tienes que escribir un montón de repeticiones, código propenso a errores. Necesitaba un contenedor ligero para mis proyectos de Android y salí con una biblioteca que también puedes usar: DavidWebb .El ejemplo anterior podría escribirse así:
Puede encontrar una lista de bibliotecas alternativas en el enlace proporcionado.
fuente
He leído las respuestas anteriores y he creado una clase de utilidad para simplificar la solicitud HTTP. Espero que te ayude.
Llamada al método
Clase de utilidad
fuente
Veo que otras respuestas han dado la alternativa, personalmente creo que intuitivamente estás haciendo lo correcto;). Lo siento, en devoxx donde varios oradores han estado despotricando sobre este tipo de cosas.
Es por eso que personalmente uso las bibliotecas HTTPClient / HttpCore de Apache para hacer este tipo de trabajo, encuentro que su API es más fácil de usar que el soporte HTTP nativo de Java. YMMV por supuesto!
fuente
fuente
import java.net.*;
!Tuve el mismo problema. Quería enviar datos a través de POST. Use el siguiente código:
Usé Jsoup para analizar:
fuente
Los métodos GET y POST se configuran de esta manera ... Dos tipos para llamadas API 1) get () y 2) post (). El método get () para obtener valor de la matriz api json para obtener el valor y el método post () se usa en nuestra publicación de datos en url y se obtiene respuesta.
fuente
Prueba este patrón:
fuente
Esta respuesta cubre el caso específico de la llamada POST utilizando un POJO Java personalizado.
Usando la dependencia de Maven para Gson para serializar nuestro objeto Java a JSON.
Instala Gson usando la dependencia a continuación.
Para aquellos que usan gradle pueden usar el siguiente
Otras importaciones utilizadas:
Ahora, podemos seguir adelante y usar el HttpPost provisto por Apache
El código anterior regresará con el código de respuesta recibido de la llamada POST
fuente
aquí envié jsonobject como parámetro // jsonobject = {"name": "lucifer", "pass": "abc"} // serverUrl = " http://192.168.100.12/testing " //host=192.168.100.12
fuente
Recomiendo encarecidamente http-request basada en la api http apache.
Para su caso, puede ver un ejemplo:
Si no está interesado en el cuerpo de respuesta
Para enviar una solicitud de envío general con http-request : lea la documentación y vea mis respuestas Solicitud HTTP POST con JSON String en JAVA , Envío de solicitud HTTP POST en Java , HTTP POST utilizando JSON en Java
fuente
Hola, por favor use esta clase para mejorar su método de publicación
fuente
Tomé la respuesta de Boann y la usé para crear un generador de cadenas de consulta más flexible que admite listas y matrices, al igual que el método http_build_query de php:
fuente
Para aquellos que tienen problemas para recibir la solicitud en una página php usando $ _POST porque esperan pares clave-valor:
Si bien todas las respuestas fueron muy útiles, carecía de una comprensión básica sobre qué cadena realmente publicar, ya que en el antiguo HttpClient de apache solía
y luego podría usar $ _POST en php para obtener los pares clave-valor.
A mi entender, ahora uno ha creado esa cadena manualmente antes de publicar. Entonces la cuerda necesita verse
pero en lugar de agregarlo a la url, se publica (en el encabezado).
La alternativa sería usar una cadena json en su lugar:
y tire de él en php sin $ _POST:
Aquí encontrará un código de muestra en Kotlin:
fuente
Parece que también debe llamar
connection.getOutputStream()
"al menos una vez" (así comosetDoOutput(true)
) para que lo trate como una POST.Entonces, el código mínimo requerido es:
Incluso puede usar parámetros de estilo "GET" en urlString, sorprendentemente. Aunque eso podría confundir las cosas.
También puede usar NameValuePair aparentemente.
fuente