Apa pustaka Java terbaik yang digunakan untuk HTTP POST, GET, dll.? [Tutup]

100

Apa pustaka Java terbaik yang digunakan untuk HTTP POST, GET, dll. Dalam hal kinerja, stabilitas, kematangan, dll.? Apakah ada satu perpustakaan tertentu yang digunakan lebih dari yang lain?

Persyaratan saya adalah mengirimkan permintaan HTTPS POST ke server jauh. Saya telah menggunakan paket java.net. * Di masa lalu serta paket org.apache.commons.httpclient. *. Keduanya telah menyelesaikan pekerjaan, tetapi saya ingin beberapa pendapat / rekomendasi Anda.

rmcc
sumber

Jawaban:

110

imho: Klien HTTP Apache

contoh penggunaan:

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

beberapa fitur sorotan:

  • Berbasis standar, Java murni, implementasi HTTP versi 1.0 dan 1.1
    • Implementasi penuh dari semua metode HTTP (GET, POST, PUT, DELETE, HEAD, OPTIONS, dan TRACE) dalam kerangka kerja OO yang dapat diperluas.
    • Mendukung enkripsi dengan protokol HTTPS (HTTP over SSL).
    • Konfigurasi dan pelacakan non-standar terperinci.
    • Koneksi transparan melalui proxy HTTP.
    • Koneksi HTTPS yang terhubung melalui proxy HTTP, melalui metode CONNECT.
    • Koneksi transparan melalui proxy SOCKS (versi 4 & 5) menggunakan dukungan soket Java asli.
    • Otentikasi menggunakan metode Basic, Digest dan encrypting NTLM (NT Lan Manager).
    • Mekanisme plug-in untuk metode autentikasi kustom.
    • Multi-Part form POST untuk mengupload file besar.
    • Implementasi soket aman yang dapat dicolokkan, membuatnya lebih mudah untuk menggunakan solusi pihak ketiga
    • Dukungan manajemen koneksi untuk digunakan dalam aplikasi multi-utas. Mendukung pengaturan koneksi total maksimum serta koneksi maksimum per host. Mendeteksi dan menutup koneksi yang basi.
    • Penanganan Cookie otomatis untuk membaca Set-Cookie: header dari server dan mengirimkannya kembali dalam header Cookie: jika sesuai.
    • Mekanisme plugin untuk kebijakan cookie kustom.
    • Minta aliran keluaran untuk menghindari buffering setiap badan konten dengan streaming langsung ke soket ke server.
    • Aliran masukan respons untuk membaca badan respons secara efisien dengan streaming langsung dari soket ke server.
    • Koneksi persisten menggunakan KeepAlive di HTTP / 1.0 dan persistensi di HTTP / 1.1
    • Akses langsung ke kode respon dan header yang dikirim oleh server.
    • Kemampuan untuk mengatur waktu tunggu koneksi.
    • HttpMethods mengimplementasikan Pola Perintah untuk memungkinkan permintaan paralel dan penggunaan kembali koneksi yang efisien.
    • Kode sumber tersedia secara gratis di bawah Lisensi Perangkat Lunak Apache.
Chris
sumber
7
+1 Jawaban bagus: Contoh bagus. Poin bagus. Anda benar-benar menjual Klien HTTP Apache.
therobyouknow
24
Dokumentasinya KELUAR DARI DATE HttpClient bukan lagi kelas konkret, ini adalah antarmuka, oleh karena itu kode di atas TIDAK AKAN BEKERJA saat mencoba membuat instance antarmuka HttpClient ini. Sebagai gantinya Anda harus membuat instance kelas yang mengimplementasikan antarmuka HttpClient, misalnya DefaultHttpClient.
therobyouknow
4
rasanya setiap rilis terlalu banyak perubahan besar ... menjadi sangat frustrasi dengan perpustakaan ini selama bertahun-tahun .... dan sekarang mereka tampaknya membocorkan koneksi dari kumpulan yang saya atur maksimal 20 .... grrrrrr .
Dean Hiller
5
Apache HttpClient tampaknya EOL sekarang, dengan perpustakaan Apache baru tersedia.
Andrew Aylett
18
Para Down-Voters yang terhormat, jawaban ini dibuat hampir 5 tahun yang lalu ...
Chris
16

Saya agak menyukai Jersey . Kami menggunakan 1,10 di semua proyek kami dan tidak mengalami masalah yang tidak dapat kami selesaikan.

Beberapa alasan mengapa saya menyukainya:

  • Penyedia - membuat penyedia soap 1.1 / 1.2 di Jersey dan telah menghilangkan kebutuhan untuk menggunakan AXIS yang besar untuk panggilan JAX-WS kami
  • Filter - membuat filter pencatatan database untuk mencatat seluruh permintaan (termasuk header permintaan / respons) sambil mencegah pencatatan informasi sensitif.
  • JAXB - mendukung marsaling ke / dari objek langsung dari permintaan / respons
  • API mudah digunakan

Sebenarnya, HTTPClient dan Jersey sangat mirip dalam implementasi dan API. Ada juga ekstensi untuk Jersey yang memungkinkannya mendukung HTTPClient.

Beberapa contoh kode dengan 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 dengan Jersey Client: https://blogs.oracle.com/PavelBucek/entry/jersey_client_apache_http_client

ElMattIO
sumber
11

Saya setuju httpclient adalah sesuatu yang standar - tetapi saya rasa Anda sedang mencari opsi jadi ...

Restlet menyediakan klien http yang dirancang khusus untuk berinteraksi dengan layanan web Restful.

Kode contoh:

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

Lihat http://www.restlet.org/ untuk lebih jelasnya

Pablojim
sumber
6

Saya ingin menyebutkan Perpustakaan Klien Ning Async Http . Saya tidak pernah menggunakannya tetapi kolega saya memuji-muji itu dibandingkan dengan Apache Http Client, yang selalu saya gunakan di masa lalu. Saya sangat tertarik untuk mempelajarinya berdasarkan Netty , kerangka kerja i / o asinkron berkinerja tinggi, yang dengannya saya lebih mengenal dan menjunjung tinggi.

Josh
sumber
6

Bolehkah saya merekomendasikan Anda jagung-httpclient . Sederhana, cepat dan cukup untuk banyak kasus.

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

ketergantungan maven

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