Какая лучшая библиотека Java для HTTP POST, GET и т.д.?

Какая лучшая библиотека Java для HTTP POST, GET и т.д. с точки зрения производительности, стабильности, зрелости и т.д.? Есть ли одна конкретная библиотека, которая используется больше, чем другие?

Мои требования отправляют запросы HTTPS POST на удаленный сервер. Я использовал пакет java.net. * В прошлом, а также пакет org.apache.commons.httpclient. *. Обе они выполнили свою работу, но мне бы хотелось, чтобы некоторые ваши мнения/рекомендации.

Ответ 1

imho: Apache HTTP Client

Пример использования

:

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

некоторые основные функции:

  • Стандартная, чистая Java, реализация HTTP версий 1.0 и 1.1
    • Полная реализация всех HTTP-методов (GET, POST, PUT, DELETE, HEAD, OPTIONS и TRACE) в расширяемая структура OO.
    • Поддерживает шифрование с протоколом HTTPS (HTTP over SSL).
    • Конфигурация и отслеживание гранулированных нестандартных стандартов.
    • Прозрачные соединения через HTTP-прокси.
    • Туннелированные HTTPS-соединения через HTTP-прокси через CONNECT Метод.
    • Прозрачные соединения через прокси SOCKS (версии 4 и 5) с использованием встроенная поддержка сокетов Java.
    • Аутентификация с использованием Basic, Digest и шифрования NTLM (NT Lan Manager).
    • Механизм подключаемого модуля для пользовательских методов проверки подлинности.
    • Многопользовательская форма POST для загрузки больших файлов.
    • Реализация подключаемых безопасных сокетов, упрощающая использовать сторонние решения.
    • Поддержка управления соединением для использования в многопоточных Приложения. Поддерживает настройку максимальные общие соединения, а также максимальные соединения на хост. Обнаруживает и закрывает устаревшие соединения.
    • Автоматическая обработка файлов cookie для чтения Set-Cookie: заголовки из сервера и отправить их обратно в Cookie: заголовок при необходимости.
    • Механизм подключаемого модуля для пользовательских политик cookie.
    • Запросить выходные потоки, чтобы избежать буферизации любого содержимого потоковая передача непосредственно в сокет сервер.
    • Ответные входные потоки для эффективного считывания тела ответа потоковая передача непосредственно из сокета в сервер.
    • Постоянные соединения с использованием KeepAlive в HTTP/1.0 и стойкость в HTTP/1.1
    • Прямой доступ к коду ответа и заголовкам, отправленным сервером.
    • Возможность устанавливать таймауты подключения.
    • HttpMethods реализует шаблон команды, чтобы разрешить параллельную запросов и эффективного повторного использования соединения.
    • Исходный код свободно доступен под лицензией программного обеспечения Apache.

Ответ 3

Я несколько частично отношусь к Jersey. Мы используем 1.10 во всех наших проектах и ​​не сталкиваемся с проблемой, с которой мы не могли решить.

Некоторые причины, по которым мне это нравится:

  • Поставщики - создатели soap 1.1/1.2 в Джерси и устранили необходимость использования громоздкой AXIS для наших вызовов JAX-WS
  • Фильтры - созданные фильтры ведения журнала базы данных для регистрации всего запроса (включая заголовки запроса/ответа), не допуская регистрации конфиденциальной информации.
  • JAXB - поддерживает маршалинг на/из объектов прямо из запроса/ответа
  • API прост в использовании

По правде говоря, HTTPClient и Jersey очень похожи в реализации и API. Существует также расширение для Jersey, которое позволяет ему поддерживать HTTPClient.

Некоторые примеры кода с 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 с Джерси Клиент: https://blogs.oracle.com/PavelBucek/entry/jersey_client_apache_http_client

Ответ 4

Я согласен, что httpclient - это что-то вроде стандарта - но я думаю, что вы ищете варианты, поэтому...

Restlet предоставляет клиент http, специально разработанный для взаимодействия с Restful web-сервисами.

Пример кода:

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

Подробнее см. http://www.restlet.org/

Ответ 5

Могу ли я рекомендовать вам corn-httpclient. Это просто, быстро и достаточно для большинства случаев.

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

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

Ответ 6

Google HTTP Java Client выглядит хорошо для меня, потому что он может работать и на Android и App Engine.

Ответ 7

Я хочу упомянуть Ning Async Http Client Library. Я никогда не использовал его, но мой коллега обманывает его по сравнению с Apache Http Client, который я всегда использовал в прошлом. Мне было особенно интересно узнать, что он основан на Netty, высокопроизводительной асинхронной структуре ввода-вывода, с которой я более знаком и высоко ценятся.