Frage Was ist die beste Java-Bibliothek für HTTP POST, GET usw.? [geschlossen]


Was ist die beste Java-Bibliothek für HTTP POST, GET usw. in Bezug auf Leistung, Stabilität, Laufzeit usw.? Gibt es eine bestimmte Bibliothek, die mehr als andere verwendet wird?

Meine Anforderungen senden HTTPS POST-Anforderungen an einen Remote-Server. Ich habe das Paket java.net. * In der Vergangenheit sowie das Paket org.apache.commons.httpclient. * Verwendet. Beide haben die Aufgabe erfüllt, aber ich möchte einige Ihrer Meinungen / Empfehlungen.


75
2017-08-24 13:13


Ursprung


Antworten:


meiner bescheidenen Meinung nach: Apache HTTP Client

Verwendungsbeispiel:

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

Einige Highlights Features:

  • Standardbasiertes, reines Java, Implementierung der HTTP-Versionen 1.0 und 1.1
    • Vollständige Implementierung aller HTTP-Methoden (GET, POST, PUT, DELETE, KOPF, OPTIONEN und TRACE) in einem erweiterbares OO-Framework.
    • Unterstützt Verschlüsselung mit HTTPS (HTTP über SSL) Protokoll.
    • Granulare Nicht-Standardkonfiguration und -verfolgung.
    • Transparente Verbindungen über HTTP-Proxies.
    • Tunneled HTTPS-Verbindungen über HTTP-Proxies, über den CONNECT Methode.
    • Transparente Verbindungen über SOCKS Proxies (Version 4 & 5) mit native Java-Socket-Unterstützung.
    • Authentifizierung mit Basic, Digest und dem verschlüsselnden NTLM (NT Lan Manager) Methoden.
    • Plug-in-Mechanismus für benutzerdefinierte Authentifizierungsmethoden
    • Multi-Part-Form POST zum Hochladen großer Dateien.
    • Pluggable Secure Sockets Implementierungen, die es einfacher machen Verwenden Sie Lösungen von Drittanbietern
    • Verbindungsverwaltungsunterstützung für die Verwendung in Multi-Threaded Anwendungen. Unterstützt Einstellung der maximale Gesamtverbindungen sowie die maximalen Verbindungen pro Host. Erkennt und schließt veraltete Verbindungen.
    • Automatische Cookie-Behandlung zum Lesen von Set-Cookie: Header aus dem Server und senden sie in einem Cookie: Header, falls zutreffend.
    • Plug-in-Mechanismus für benutzerdefinierte Cookie-Richtlinien.
    • Fordern Sie Ausgabeströme an, um das Zwischenspeichern von Inhaltskörpern zu vermeiden Streaming direkt an den Socket zu der Server.
    • Antwort-Eingabeströme, um den Antworttext effizient zu lesen Streaming direkt vom Socket nach der Server.
    • Persistente Verbindungen mit KeepAlive in HTTP / 1.0 und persistance in HTTP / 1.1
    • Direkter Zugriff auf den Antwortcode und die vom Server gesendeten Header.
    • Die Möglichkeit, Verbindungstimeouts festzulegen.
    • HttpMethods implementieren das Befehlsmuster, um parallel zu ermöglichen Anfragen und effiziente Wiederverwendung von Verbindungen.
    • Der Quellcode ist unter der Apache-Softwarelizenz frei verfügbar.

89
2017-08-24 13:16



ich würde empfehlen Apache HttpComponents HttpClient, ein Nachfolger von Commons HttpClient

Ich würde auch empfehlen, HtmlUnit zu betrachten. HtmlUnit ist ein "GUI-Less Browser für Java-Programme". http://htmlunit.sourceforge.net/


18
2017-12-04 13:18



Ich bin etwas voreingenommen Jersey. Wir verwenden 1,10 in all unseren Projekten und sind nicht auf ein Problem gestoßen, das wir damit nicht lösen konnten.

Einige Gründe, warum ich es mag:

  • Anbieter - erstellt Seife 1.1 / 1.2 Anbieter in Jersey und haben die Notwendigkeit beseitigt, die sperrige AXIS für unsere JAX-WS-Anrufe zu verwenden
  • Filter - erstellt Filter für die Datenbankprotokollierung, um die gesamte Anforderung (einschließlich der Anforderungs- / Antwortheader) zu protokollieren und gleichzeitig die Protokollierung vertraulicher Informationen zu verhindern.
  • JAXB - unterstützt das Marshalling von / zu Objekten direkt aus der Anfrage / Antwort
  • API ist einfach zu bedienen

In Wirklichkeit sind HTTPClient und Jersey in Implementierung und API sehr ähnlich. Es gibt auch eine Erweiterung für Jersey, die es ermöglicht, HTTPClient zu unterstützen.

Einige Codebeispiele mit Jersey 1.x: https://blogs.oracle.com/enterprisetechtipps/entry/consuming_restful_web_services_with

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

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


15
2017-12-04 13:23



Ich stimme zu httpclient ist etwas von einem Standard - aber ich denke, dass Sie nach Optionen suchen, so ...

Restlet bietet einen HTTP-Client, der speziell für die Interaktion mit Restful-Webdiensten entwickelt wurde.

Beispielcode:

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

Sehen http://www.restlet.org/ für mehr Details


9
2017-08-25 08:22



Darf ich dich empfehlen Mais-httpclient. Es ist einfach, schnell und für die meisten Fälle ausreichend.

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 Abhängigkeit

<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 sieht gut aus, weil es auch auf Android und App Engine laufen kann.


2
2018-01-08 12:59



Ich möchte das erwähnen Ning Async Http-Client-Bibliothek. Ich habe es nie benutzt, aber mein Kollege schwärmt davon, verglichen mit dem Apache Http Client, den ich schon immer benutzt habe. Ich war besonders interessiert daran zu erfahren, dass es darauf basiert Nettydas hochperformante asynchrone I / O-Framework, mit dem ich vertrauter bin und das ich sehr schätze.


2
2018-05-13 09:28