108 votes

Quelle est la meilleure bibliothèque Java à utiliser pour HTTP POST, GET, etc.?

Quelle est la meilleure bibliothèque Java à utiliser pour HTTP POST, GET, etc. en termes de performances, de stabilité, de maturité, etc.? Est-il une bibliothèque particulière qui est utilisé plus que d'autres?

Mes exigences sont soumis POST HTTPS demandes à un serveur distant. J'ai utilisé le java.net.* package dans le passé ainsi que org.apache.commons.httpclient.* package. Les deux ont fait le travail, mais j'aimerais que certains de vos avis/recommandations.

112voto

Chris Points 4552

mon humble avis: Client HTTP Apache

exemple d'utilisation:

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();
    }  
  }
}

certains mettent en avant les caractéristiques:

  • Basée sur des normes, Java pur, la mise en œuvre de HTTP versions 1.0 et 1.1
    • La pleine mise en œuvre de toutes les méthodes HTTP (GET, POST, PUT, DELETE, La TÊTE, les OPTIONS, et TRACE) dans un extensible OO cadre.
    • Prend en charge le cryptage avec le protocole HTTPS (HTTP over SSL).
    • Granulaire non-normes de configuration et de suivi.
    • Transparent connexions par proxy HTTP.
    • Tunnel HTTPS connexions par proxy HTTP, via la connexion la méthode.
    • Transparent connexions à travers les CHAUSSETTES de procurations (la version 4 & 5) à l'aide de Java natif prise en charge.
    • L'authentification à l'aide Basic, Digest et le chiffrement NTLM (NT Lan Manager) méthodes.
    • Mécanisme de Plug-in personnalisées de méthodes d'authentification.
    • Multi-POST de formulaire pour l'envoi de fichiers volumineux.
    • Enfichable secure sockets applications, ce qui rend plus facile pour l'utilisation de solutions tierces
    • Gestion de la connexion à un soutien pour l'utilisation en multi-thread des applications. Prend en charge le réglage de la total maximum de connexions ainsi que le nombre maximal de connexions par hôte. Détecte et ferme rassis connexions.
    • La gestion automatique des Cookies pour la lecture de Set-Cookie: en-têtes de la serveur et de les renvoyer dans une Cookie: à l'en-tête approprié.
    • Mécanisme de Plug-in pour cookie personnalisé politiques.
    • Demande de flux de sortie pour éviter la mise en mémoire tampon de tout contenu du corps par streaming directement à la prise de le serveur.
    • Réponse les flux d'entrée efficacement lire le corps de la réponse par streaming directement à partir de la prise de le serveur.
    • Les connexions persistantes à l'aide de KeepAlive dans HTTP/1.0 et de la persistance dans HTTP/1.1
    • Accès Direct au code de réponse et les en-têtes envoyés par le serveur.
    • La possibilité de définir des délais d'attente de connexion.
    • HttpMethods mettre en œuvre le Modèle de Commande pour permettre parallèle les demandes et efficace ré-utilisation de les connexions.
    • Le code Source est librement disponible sous l'Apache Software License.

26voto

Adil Points 2148

Je recommande Apache HttpComponents HttpClient, un successeur de Communes HttpClient

16voto

THAKK0 Points 151

Je suis un peu partielle à Jersey. Nous utilisons 1.10 dans tous nos projets et n'ai pas couru dans un problème que l'on ne pouvait pas résoudre.

Quelques raisons pourquoi je l'aime:

  • Fournisseurs - créé soap 1.1/1.2 fournisseurs de Jersey et ont éliminé la nécessité d'utiliser les encombrants AXE pour notre JAX-WS appels
  • Filtres - créé la base de données de journalisation des filtres pour connecter l'ensemble de la demande (y compris la demande/en-têtes de réponse), tout en empêchant l'enregistrement des informations sensibles.
  • JAXB - prend en charge le marshaling vers/à partir d'objets directement à partir de la requête/réponse
  • L'API est facile à utiliser

En vérité, HTTPClient et Jersey sont très similaires dans la mise en œuvre et de l'API. Il existe aussi une extension pour le Jersey qui permet de soutenir des HTTPClient.

Quelques exemples de code avec 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/

HTTPClient avec Jersey Client: https://blogs.oracle.com/PavelBucek/entry/jersey_client_apache_http_client

11voto

Pablojim Points 4367

Je suis d'accord httpclient est quelque chose de standard - mais je suppose que vous êtes à la recherche pour les options...

Restlet fournit à un client http, spécialement conçu pour les interactong avec des services web Restful.

Exemple de code:

    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);

Voir http://www.restlet.org/ pour plus de détails

6voto

Serhat Points 84

Je vous recommande de maïs-httpclient. C'est simple,rapide et suffisant pour la plupart des cas.

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));

maven dependency

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X