Pregunta ¿Cuál es la mejor biblioteca de Java para HTTP POST, GET, etc.? [cerrado]


¿Cuál es la mejor biblioteca de Java para HTTP POST, GET, etc. en términos de rendimiento, estabilidad, madurez, etc.? ¿Hay alguna biblioteca en particular que se use más que otras?

Mis requisitos son enviar solicitudes HTTPS POST a un servidor remoto. He utilizado el paquete java.net. * En el pasado y el paquete org.apache.commons.httpclient. *. Ambos han hecho el trabajo, pero me gustaría algunas de sus opiniones / recomendaciones.


75
2017-08-24 13:13


origen


Respuestas:


En mi humilde opinión: Apache HTTP Client

ejemplo de uso:

import org.apache.commons.httpclient.*;
import org.apache.commons.httpclient.methods.*;
import org.apache.commons.httpclient.params.HttpMethodParams;

import java.io.*;

public class HttpClientTutorial {

  private static String url = "http://www.apache.org/";

  public static void main(String[] args) {
    // Create an instance of HttpClient.
    HttpClient client = new HttpClient();

    // Create a method instance.
    GetMethod method = new GetMethod(url);

    // Provide custom retry handler is necessary
    method.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, 
            new DefaultHttpMethodRetryHandler(3, false));

    try {
      // Execute the method.
      int statusCode = client.executeMethod(method);

      if (statusCode != HttpStatus.SC_OK) {
        System.err.println("Method failed: " + method.getStatusLine());
      }

      // Read the response body.
      byte[] responseBody = method.getResponseBody();

      // Deal with the response.
      // Use caution: ensure correct character encoding and is not binary data
      System.out.println(new String(responseBody));

    } catch (HttpException e) {
      System.err.println("Fatal protocol violation: " + e.getMessage());
      e.printStackTrace();
    } catch (IOException e) {
      System.err.println("Fatal transport error: " + e.getMessage());
      e.printStackTrace();
    } finally {
      // Release the connection.
      method.releaseConnection();
    }  
  }
}

algunas características destacadas:

  • Basado en estándares, Java puro, implementación de las versiones HTTP 1.0 y 1.1
    • Implementación completa de todos los métodos HTTP (GET, POST, PUT, DELETE, HEAD, OPTIONS, y TRACE) en una marco OO extensible.
    • Admite cifrado con protocolo HTTPS (HTTP sobre SSL).
    • Configuración granular no estándar y seguimiento.
    • Conexiones transparentes a través de proxies HTTP.
    • Conexiones HTTPS en túnel a través de proxies HTTP, a través de CONNECT método.
    • Conexiones transparentes a través de proxies SOCKS (versiones 4 y 5) usando soporte nativo de socket Java.
    • Autenticación usando Basic, Digest y el NTLM de encriptación (NT Métodos de Lan Manager).
    • Mecanismo de complemento para métodos de autenticación personalizados.
    • Multi-Parte forma POST para cargar archivos de gran tamaño.
    • Implementaciones de enchufes seguros conectables, por lo que es más fácil utilizar soluciones de terceros
    • Soporte de administración de conexión para uso en multihilo aplicaciones. Admite configurar el máximo total de conexiones, así como las conexiones máximas por host. Detecta y cierra conexiones obsoletas.
    • Manejo automático de cookies para leer Set-Cookie: encabezados del servidor y enviarlos de vuelta en una Cookie: encabezado cuando sea apropiado.
    • Mecanismo de complemento para políticas de cookies personalizadas.
    • Solicite secuencias de salida para evitar almacenar en búfer cualquier cuerpo de contenido streaming directamente al socket para el servidor.
    • Flujos de entrada de respuesta para leer eficientemente el cuerpo de respuesta transmisión directa desde el socket a el servidor.
    • Conexiones persistentes utilizando KeepAlive en HTTP / 1.0 y persistencia en HTTP / 1.1
    • Acceso directo al código de respuesta y a los encabezados enviados por el servidor.
    • La capacidad de establecer tiempos de espera de conexión.
    • HttpMethods implementa el patrón de comando para permitir paralelo solicitudes y la reutilización eficiente de conexiones.
    • El código fuente está disponible gratuitamente bajo la licencia de Apache Software.

89
2017-08-24 13:16



yo recomendaria Apache HttpComponents HttpClient, un sucesor de Commons HttpClient

También recomendaría echar un vistazo a HtmlUnit. HtmlUnit es un "navegador GUI-Less para programas Java". http://htmlunit.sourceforge.net/


18
2017-12-04 13:18



Soy algo parcial a Jersey. Usamos 1.10 en todos nuestros proyectos y no nos hemos encontrado con un problema que no podamos resolver con él.

Algunas razones por las que me gusta:

  • Proveedores: crearon proveedores de jabón 1.1 / 1.2 en Jersey y eliminaron la necesidad de utilizar el voluminoso AXIS para nuestras llamadas JAX-WS.
  • Filtros: creó filtros de inicio de sesión de la base de datos para registrar toda la solicitud (incluidos los encabezados de solicitud / respuesta) al tiempo que evita el registro de información confidencial.
  • JAXB: admite referencias a / desde objetos directamente desde la solicitud / respuesta
  • API es fácil de usar

En verdad, HTTPClient y Jersey son muy similares en implementación y API. También hay una extensión para Jersey que le permite admitir HTTPClient.

Algunos ejemplos de código con Jersey 1.x: https://blogs.oracle.com/enterprisetechtips/entry/consuming_restful_web_services_with

http://www.mkyong.com/webservices/jax-rs/restful-java-client-with-jersey-client/

Cliente HTTP con Jersey Client: https://blogs.oracle.com/PavelBucek/entry/jersey_client_apache_http_client


15
2017-12-04 13:23



Acepto httpclient es algo así como un estándar, pero supongo que estás buscando opciones, así que ...

Restlet proporciona un cliente http especialmente diseñado para interactuar con los servicios web de Restful.

Código de ejemplo:

    Client client = new Client(Protocol.HTTP);
    Request r = new Request();
    r.setResourceRef("http://127.0.0.1:8182/sample");
    r.setMethod(Method.GET);
    r.getClientInfo().getAcceptedMediaTypes().add(new Preference<MediaType>(MediaType.TEXT_XML));
    client.handle(r).getEntity().write(System.out);

Ver http://www.restlet.org/ para más detalles


9
2017-08-25 08:22



Puedo recomendarte maíz-httpcliente. Es simple, rápido y suficiente para la mayoría de los casos.

HttpForm form = new HttpForm(new URI("http://localhost:8080/test/formtest.jsp"));
//Authentication form.setCredentials("user1", "password");
form.putFieldValue("input1", "your value");
HttpResponse response = form.doPost();
assertFalse(response.hasError());
assertNotNull(response.getData());
assertTrue(response.getData().contains("received " + val));

dependencia maven

<dependency>
    <groupId>net.sf.corn</groupId>
    <artifactId>corn-httpclient</artifactId>
    <version>1.0.0</version>
</dependency>

5
2018-05-19 22:15



Google HTTP Java Client me queda bien porque también se puede ejecutar en Android y App Engine.


2
2018-01-08 12:59



Quiero mencionar el Biblioteca de cliente de Ning Async Http. Nunca lo he usado, pero mi colega se jacta de ello en comparación con Apache Http Client, que siempre he usado en el pasado. Estaba particularmente interesado en aprender que se basa en Netty, el marco de E / S asíncronas de alto rendimiento, con el que estoy más familiarizado y tengo mucha estima.


2
2018-05-13 09:28