HTTP POST, GET vb. İçin kullanılacak en iyi Java kitaplığı nedir? [kapalı]


101

Performans, kararlılık, olgunluk vb. Açısından HTTP POST, GET vb. İçin kullanılacak en iyi Java kitaplığı hangisidir? Diğerlerinden daha fazla kullanılan belirli bir kütüphane var mı?

Gereksinimlerim, HTTPS POST isteklerini uzak bir sunucuya göndermek. Org.apache.commons.httpclient. * Paketinin yanı sıra geçmişte java.net. * Paketini kullandım. Her ikisi de işi tamamladı, ancak bazı fikirlerinizi / önerilerinizi almak istiyorum.

Yanıtlar:


110

imho: Apache HTTP İstemcisi

kullanım örneği:

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

bazı önemli özellikler:

  • Standart tabanlı, saf Java, 1.0 ve 1.1 HTTP sürümlerinin uygulanması
    • Genişletilebilir bir OO çerçevesinde tüm HTTP yöntemlerinin (GET, POST, PUT, DELETE, HEAD, OPTIONS ve TRACE) tam uygulaması.
    • HTTPS (SSL üzerinden HTTP) protokolüyle şifrelemeyi destekler.
    • Standart dışı ayrıntılı yapılandırma ve izleme.
    • HTTP proxy'leri aracılığıyla şeffaf bağlantılar.
    • CONNECT yöntemi aracılığıyla HTTP proxy'leri aracılığıyla tünelli HTTPS bağlantıları.
    • Yerel Java soket desteği kullanan SOCKS proxy'leri (sürüm 4 ve 5) aracılığıyla şeffaf bağlantılar.
    • Basic, Digest ve şifreleme NTLM (NT Lan Manager) yöntemlerini kullanarak kimlik doğrulama.
    • Özel kimlik doğrulama yöntemleri için eklenti mekanizması.
    • Büyük dosyaları yüklemek için Çok Parçalı form POST.
    • Takılabilir güvenli soket uygulamaları, üçüncü taraf çözümlerinin kullanımını kolaylaştırır
    • Çok iş parçacıklı uygulamalarda kullanım için bağlantı yönetimi desteği. Maksimum toplam bağlantıların yanı sıra ana bilgisayar başına maksimum bağlantıların ayarlanmasını destekler. Eski bağlantıları algılar ve kapatır.
    • Set-Cookie: sunucudan başlıkları okumak ve uygun olduğunda bunları bir Cookie: başlığında geri göndermek için otomatik Cookie kullanımı.
    • Özel çerez politikaları için eklenti mekanizması.
    • Herhangi bir içerik gövdesinin arabelleğe alınmasını önlemek için doğrudan sokete sunucuya akışla akış yoluyla çıktı akışları isteyin.
    • Doğrudan soketten sunucuya aktararak yanıt gövdesini verimli bir şekilde okumak için yanıt giriş akışları.
    • KeepAlive kullanarak HTTP / 1.0'da kalıcı bağlantılar ve HTTP / 1.1'de kalıcılık
    • Sunucu tarafından gönderilen yanıt koduna ve başlıklara doğrudan erişim.
    • Bağlantı zaman aşımlarını ayarlama yeteneği.
    • HttpMethods, paralel isteklere ve bağlantıların verimli bir şekilde yeniden kullanımına izin vermek için Komut Modelini uygular.
    • Kaynak kodu, Apache Yazılım Lisansı altında ücretsiz olarak mevcuttur.

7
+1 Harika cevap: Harika bir örnek. Harika noktalar. Gerçekten Apache HTTP İstemcisi satıyorsunuz.
therobyouknow

24
Ancak dokümantasyon TARİHİ GEÇMİŞ. HttpClient artık somut bir sınıf değildir, bir arayüzdür, bu nedenle yukarıdaki kod bu HttpClient arayüzünü başlatmaya çalışırken ÇALIŞMAYACAKTIR. Bunun yerine, HttpClient arabirimini uygulayan bir sınıfı başlatmanız gerekir, örneğin DefaultHttpClient.
therobyouknow

4
her sürümün çok fazla büyük değişiklik olduğunu hissettiriyor ... yıllar içinde bu kitaplıktan gerçekten hüsrana uğruyor ... ve şimdi en fazla 20 kurulumum olan havuzdan bağlantılar sızdırıyor gibi görünüyor ... .
Dekan Hiller

5
Apache HttpClient artık yeni bir Apache kitaplığı ile birlikte EOL gibi görünüyor.
Andrew Aylett

18
Değerli Oy Verenler, bu cevap neredeyse 5 yıl önce oluşturuldu ...
Chris


16

Ben Jersey'e biraz düşkünüm . Tüm projelerimizde 1.10 kullanıyoruz ve çözemediğimiz bir sorunla karşılaşmadık.

Beğenmemin bazı nedenleri:

  • Sağlayıcılar - Jersey'de sabun 1.1 / 1.2 sağlayıcıları oluşturdu ve JAX-WS çağrılarımız için büyük AXIS kullanma ihtiyacını ortadan kaldırdı
  • Filtreler - hassas bilgilerin günlüğe kaydedilmesini önlerken tüm isteği (istek / yanıt başlıkları dahil) günlüğe kaydetmek için oluşturulan veritabanı günlük filtreleri.
  • JAXB - doğrudan istek / yanıttan nesnelere / nesnelere sıralanmayı destekler
  • API'nin kullanımı kolaydır

Gerçekte, HTTPClient ve Jersey, uygulama ve API açısından çok benzer. Jersey için HTTPClient'ı desteklemesine izin veren bir uzantı da vardır.

Jersey 1.x ile bazı kod örnekleri: https://blogs.oracle.com/enterprisetechtips/entry/consuming_restful_web_services_with

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

Jersey İstemcisi ile HTTPClient: https://blogs.oracle.com/PavelBucek/entry/jersey_client_apache_http_client


11

Httpclient'in standart bir şey olduğuna katılıyorum - ama sanırım seçenekler arıyorsunuz bu yüzden ...

Restlet, Restful web servisleri ile interactong için özel olarak tasarlanmış bir http istemcisi sağlar.

Örnek kod:

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

Daha fazla ayrıntı için http://www.restlet.org/ adresine bakın


6

Ning Async Http İstemci Kitaplığından bahsetmek istiyorum . Hiç kullanmadım ama meslektaşım geçmişte her zaman kullandığım Apache Http İstemcisi ile karşılaştırıldığında bundan övgüyle söz ediyor. Daha aşina olduğum ve saygınlığım yüksek olan yüksek performanslı eşzamansız i / o çerçevesi olan Netty'ye dayandığını öğrenmek özellikle ilgimi çekti .


6

Size corn-httpclient'i tavsiye edebilir miyim ? Basit, hızlı ve çoğu durum için yeterli.

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 bağımlılığı

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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.