Respuesta actualizada:
Dado que algunas de las clases, en la respuesta original, están en desuso en la versión más reciente de Apache HTTP Components, estoy publicando esta actualización.
Por cierto, puede acceder a la documentación completa para obtener más ejemplos aquí .
HttpClient httpclient = HttpClients.createDefault();
HttpPost httppost = new HttpPost("http://www.a-domain.com/foo/");
// Request parameters and other properties.
List<NameValuePair> params = new ArrayList<NameValuePair>(2);
params.add(new BasicNameValuePair("param-1", "12345"));
params.add(new BasicNameValuePair("param-2", "Hello!"));
httppost.setEntity(new UrlEncodedFormEntity(params, "UTF-8"));
//Execute and get the response.
HttpResponse response = httpclient.execute(httppost);
HttpEntity entity = response.getEntity();
if (entity != null) {
try (InputStream instream = entity.getContent()) {
// do something useful
}
}
Respuesta original
Recomiendo usar Apache HttpClient. Es más rápido y más fácil de implementar.
HttpPost post = new HttpPost("http://jakarata.apache.org/");
NameValuePair[] data = {
new NameValuePair("user", "joe"),
new NameValuePair("password", "bloggs")
};
post.setRequestBody(data);
// execute method and handle any error responses.
...
InputStream in = post.getResponseBodyAsStream();
// handle response.
Para obtener más información, consulte esta URL: http://hc.apache.org/
PostMethod
, parece que en realidad ahora se llamaHttpPost
según stackoverflow.com/a/9242394/1338936 , solo para cualquiera que encuentre esta respuesta como lo hice :)Enviar una solicitud POST es fácil en Java vainilla. Comenzando con a
URL
, necesitamos convertirlo a unURLConnection
usourl.openConnection();
. Después de eso, necesitamos convertirlo en aHttpURLConnection
, para que podamos acceder a susetRequestMethod()
método para establecer nuestro método. Finalmente decimos que vamos a enviar datos a través de la conexión.Luego tenemos que indicar lo que vamos a enviar:
Enviar un formulario simple
Una POST normal proveniente de un formulario http tiene un formato bien definido . Necesitamos convertir nuestra entrada a este formato:
Luego podemos adjuntar el contenido de nuestro formulario a la solicitud http con los encabezados adecuados y enviarlo.
Enviando JSON
También podemos enviar json usando java, esto también es fácil:
Recuerde que diferentes servidores aceptan diferentes tipos de contenido para json, vea esta pregunta.
Envío de archivos con publicación java
El envío de archivos puede considerarse más difícil de manejar ya que el formato es más complejo. También vamos a agregar soporte para enviar los archivos como una cadena, ya que no queremos almacenar el archivo en el búfer completamente en la memoria.
Para esto, definimos algunos métodos auxiliares:
Luego podemos usar estos métodos para crear una solicitud de publicación de varias partes de la siguiente manera:
fuente
out.write(finishBoundaryBytes);
necesita línea?http.connect();
realizará el envío POST, ¿no?requests.post('http://httpbin.org/post', data = {'key':'value'})
en Python ... Soy nuevo en Java, así que este es un uso muy extraño de la palabra "fácil" para mí :)fuente
encode(String)
es obsoleto. Tienes que usarencode(String, String)
, que especifica el tipo de codificación. Ejemplo:encode(rawData, "UTF-8")
.La primera respuesta fue excelente, pero tuve que agregar try / catch para evitar errores del compilador de Java.
Además, tuve problemas para entender cómo leer las
HttpResponse
bibliotecas Java.Aquí está el código más completo:
fuente
e.printStackTrace()
no maneja nada.Una manera simple de usar los componentes HTTP de Apache es
Echa un vistazo a la API Fluent
fuente
La forma más sencilla de enviar parámetros con la solicitud de publicación:
Has hecho. ahora puedes usar
responsePOST
. Obtener contenido de respuesta como cadena:fuente
Llamar
HttpURLConnection.setRequestMethod("POST")
y, enHttpURLConnection.setDoOutput(true);
realidad, solo se necesita este último ya que POST se convierte en el método predeterminado.fuente
Recomiendo usar http-request construido en apache http api.
fuente