moim zdaniem: klient HTTP Apache
przykład użycia:
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) {
HttpClient client = new HttpClient();
GetMethod method = new GetMethod(url);
method.getParams().setParameter(HttpMethodParams.RETRY_HANDLER,
new DefaultHttpMethodRetryHandler(3, false));
try {
int statusCode = client.executeMethod(method);
if (statusCode != HttpStatus.SC_OK) {
System.err.println("Method failed: " + method.getStatusLine());
}
byte[] responseBody = method.getResponseBody();
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 {
method.releaseConnection();
}
}
}
niektóre najważniejsze funkcje:
- Oparta na standardach, czysta Java, implementacja HTTP w wersjach 1.0 i 1.1
- Pełna implementacja wszystkich metod HTTP (GET, POST, PUT, DELETE, HEAD, OPTIONS i TRACE) w rozszerzalnej strukturze OO.
- Obsługuje szyfrowanie za pomocą protokołu HTTPS (HTTP przez SSL).
- Szczegółowa konfiguracja i śledzenie niestandardowych rozwiązań.
- Przejrzyste połączenia przez proxy HTTP.
- Tunelowane połączenia HTTPS przez serwery proxy HTTP za pośrednictwem metody CONNECT.
- Przezroczyste połączenia przez proxy SOCKS (wersja 4 i 5) przy użyciu natywnej obsługi gniazd Java.
- Uwierzytelnianie za pomocą metod Basic, Digest i szyfrowania NTLM (NT Lan Manager).
- Mechanizm wtyczek dla niestandardowych metod uwierzytelniania.
- Wieloczęściowy formularz POST do przesyłania dużych plików.
- Implementacje wtykowych bezpiecznych gniazd, ułatwiające korzystanie z rozwiązań innych firm
- Obsługa zarządzania połączeniami do użytku w aplikacjach wielowątkowych. Obsługuje ustawienie maksymalnej liczby połączeń, a także maksymalnej liczby połączeń na hosta. Wykrywa i zamyka nieaktualne połączenia.
- Automatyczna obsługa plików cookie do odczytywania nagłówków Set-Cookie: z serwera i wysyłania ich z powrotem w nagłówku Cookie: w razie potrzeby.
- Mechanizm wtyczki do niestandardowych zasad dotyczących plików cookie.
- Żądaj strumieni wyjściowych, aby uniknąć buforowania treści przez przesyłanie strumieniowe bezpośrednio do gniazda na serwer.
- Strumienie wejściowe odpowiedzi, aby efektywnie odczytać treść odpowiedzi, przesyłając strumieniowo bezpośrednio z gniazda do serwera.
- Stałe połączenia przy użyciu KeepAlive w HTTP / 1.0 i trwałość w HTTP / 1.1
- Bezpośredni dostęp do kodu odpowiedzi i nagłówków przesłanych przez serwer.
- Możliwość ustawienia limitów czasu połączenia.
- HttpMethods implementuje wzorzec polecenia, aby umożliwić równoległe żądania i wydajne ponowne wykorzystanie połączeń.
- Kod źródłowy jest dostępny bezpłatnie na licencji oprogramowania Apache.
Polecam Apache HttpComponents HttpClient , następca Gmin HttpClient
Poleciłbym również przyjrzeć się HtmlUnit. HtmlUnit to „przeglądarka pozbawiona GUI dla programów Java”. http://htmlunit.sourceforge.net/
źródło
Jestem trochę stronniczy w stosunku do Jersey . Używamy 1.10 we wszystkich naszych projektach i nie napotkaliśmy problemu, którego nie moglibyśmy za jego pomocą rozwiązać.
Kilka powodów, dla których to lubię:
Prawdę mówiąc, HTTPClient i Jersey są bardzo podobne pod względem implementacji i API. Istnieje również rozszerzenie dla Jersey, które pozwala na obsługę HTTPClient.
Niektóre przykłady kodu z 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 z klientem Jersey: https://blogs.oracle.com/PavelBucek/entry/jersey_client_apache_http_client
źródło
Zgadzam się, że httpclient to coś w rodzaju standardu - ale myślę, że szukasz opcji, więc ...
Restlet zapewnia klienta http zaprojektowanego specjalnie do interakcji z usługami sieciowymi Restful.
Przykładowy 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);
Więcej informacji można znaleźć pod adresem http://www.restlet.org/
źródło
Chcę wspomnieć o bibliotece klienta HTTP Ning Async . Nigdy go nie używałem, ale mój kolega zachwyca się nim w porównaniu do klienta HTTP Apache, z którego zawsze korzystałem w przeszłości. Byłem szczególnie zainteresowany, aby dowiedzieć się, że jest oparty na Netty , wysokowydajnym asynchronicznym frameworku I / O, z którym jestem bardziej zaznajomiony i wysoko ceniony.
źródło
Czy mogę polecić Ci corn-httpclient . To proste, szybkie i wystarczające w większości przypadków.
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));
zależność maven
<dependency> <groupId>net.sf.corn</groupId> <artifactId>corn-httpclient</artifactId> <version>1.0.0</version> </dependency>
źródło
Klient Google HTTP Java wygląda dla mnie dobrze, ponieważ może działać również na Androidzie i App Engine.
źródło