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


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

Persyaratan saya 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.


75
2017-08-24 13:13


asal


Jawaban:


Menurut opini saya: 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, KEPALA, PILIHAN, dan TRACE) dalam sebuah kerangka kerja OO yang dapat diperluas.
    • Mendukung enkripsi dengan protokol HTTPS (HTTP over SSL).
    • Konfigurasi dan pelacakan non-standar granular.
    • Koneksi transparan melalui proksi HTTP.
    • Koneksi HTTPS Tunneled melalui proksi HTTP, melalui CONNECT metode.
    • Koneksi transparan melalui SOCKS proxy (versi 4 & 5) menggunakan dukungan soket Java asli.
    • Otentikasi menggunakan Basic, Intest dan NTLM yang mengenkripsi (NT Manajer Lan) metode.
    • Mekanisme plug-in untuk metode autentikasi kustom.
    • Multi-Part form POST untuk mengunggah file besar.
    • Pluggable secure socket implementasi, membuatnya lebih mudah menggunakan solusi pihak ketiga
    • Dukungan manajemen koneksi untuk digunakan dalam multi-threaded aplikasi. Mendukung pengaturan koneksi total maksimum juga koneksi maksimum per host. Mendeteksi dan menutup koneksi basi.
    • Penanganan Cookie otomatis untuk membaca Set-Cookie: header dari server dan mengirimnya kembali dalam Cookie: tajuk bila perlu.
    • Mekanisme plug-in untuk kebijakan cookie kustom.
    • Minta arus keluaran untuk menghindari buffering konten apa pun oleh streaming langsung ke soket ke server.
    • Arus masukan respons untuk secara efisien membaca respons oleh streaming langsung dari soket ke server.
    • Koneksi persisten menggunakan KeepAlive di HTTP / 1.0 dan persistensi di HTTP / 1.1
    • Akses langsung ke kode respons dan header yang dikirim oleh server.
    • Kemampuan untuk mengatur waktu koneksi.
    • HttpMethods mengimplementasikan Pola Perintah untuk memungkinkan paralel permintaan dan penggunaan kembali yang efisien koneksi.
    • Kode sumber tersedia secara gratis di bawah Lisensi Perangkat Lunak Apache.

89
2017-08-24 13:16



saya ingin merekomendasikan Apache HttpComponents HttpClient, penerus dari Commons HttpClient

Saya juga merekomendasikan untuk melihat HtmlUnit. HtmlUnit adalah "browser GUI-Kurang untuk program Java". http://htmlunit.sourceforge.net/


18
2017-12-04 13:18



Saya agak parsial Jersey. Kami menggunakan 1.10 di semua proyek kami dan tidak mengalami masalah yang tidak bisa kami atasi.

Beberapa alasan mengapa saya menyukainya:

  • Provider - menciptakan penyedia sabun 1.1 / 1.2 di Jersey dan telah menghilangkan kebutuhan untuk menggunakan AXIS besar untuk panggilan JAX-WS kami
  • Filter - membuat filter pencatatan log basis data untuk mencatat seluruh permintaan (termasuk header permintaan / respons) sambil mencegah pencatatan informasi sensitif.
  • JAXB - mendukung marshaling 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 untuk 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 Klien Jersey: https://blogs.oracle.com/PavelBucek/entry/jersey_client_apache_http_client


15
2017-12-04 13:23



Saya setuju httpclient adalah sesuatu yang standar - tapi saya kira Anda sedang mencari opsi jadi ...

Restlet menyediakan klien http yang dirancang khusus untuk interactong dengan layanan web yang tenang.

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


9
2017-08-25 08:22



Izinkan saya merekomendasikan Anda jagung-httpclient. Ini sederhana, cepat, dan cukup untuk sebagian besar 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>

5
2018-05-19 22:15



Google HTTP Java Client terlihat baik bagi saya karena dapat berjalan di Android dan App Engine juga.


2
2018-01-08 12:59



Saya ingin menyebutkan Ning Async Http Client Library. Saya tidak pernah menggunakannya tetapi rekan saya mengoceh tentang hal itu dibandingkan dengan Klien Http Apache, yang saya selalu gunakan di masa lalu. Saya sangat tertarik untuk mempelajarinya Netty, kerangka kerja i / o berkinerja tinggi, dengan mana saya lebih akrab dan memiliki harga diri yang tinggi.


2
2018-05-13 09:28