什么是用于HTTP POST,GET等最好的Java库?

在性能,稳定性,成熟度等方面,用于HTTP POST,GET等的最佳Java库是什么? 是否有一个特定的图书馆比其他图书馆使用得更多?

我的要求是提交HTTPS POST请求到远程服务器。 我已经使用了过去的java.net。*包以及org.apache.commons.httpclient。*包。 两者都已经完成了工作,但是我想请你提一些意见/build议。

imho: Apache HTTP客户端

用法示例:

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

一些高亮function:

  • 基于标准的纯Java,实现HTTP版本1.0和1.1
    • 在一个可扩展的OO框架中全部实现所有HTTP方法(GET,POST,PUT,DELETE,HEAD,OPTIONS和TRACE)。
    • 支持使用HTTPS(HTTP over SSL)协议进行encryption。
    • 细粒度的非标准configuration和跟踪。
    • 通过HTTP代理的透明连接。
    • 通过HTTP代理通过CONNECT方法隧道式HTTPS连接。
    • 通过使用本地Java套接字支持的SOCKS代理(版本4和5)的透明连接。
    • 使用基本,摘要和encryptionNTLM(NT局域网pipe理器)方法进行身份validation。
    • 自定义身份validation方法的插件机制。
    • 用于上传大文件的多部分表单POST。
    • 可插拔的安全套接字实现,使得更容易使用第三方解决scheme
    • 连接pipe理支持用于multithreading应用程序。 支持设置最大总连接数以及每个主机的最大连接数。 检测并closures陈旧的连接。
    • 自动Cookie处理,用于读取服务器中的Set-Cookie:头文件,并在适当的时候将其发送回Cookie:头文件。
    • 自定义cookie策略的插件机制。
    • 请求输出stream以避免通过直接stream式传输到服务器的套接字来缓冲任何内容主体。
    • 响应inputstream通过直接从套接字stream式传输到服务器来有效地读取响应主体。
    • 在HTTP / 1.0中使用KeepAlive的持续连接和在HTTP / 1.1中的持久连接
    • 直接访问服务器发送的响应代码和头文件。
    • 能够设置连接超时。
    • HttpMethods实现了命令模式,以允许并行请求和高效的连接重用。
    • 源代码可以在Apache软件许可下免费获得。

我会推荐Apache HttpComponents HttpClient , Commons HttpClient的继任者

我也build议看看HtmlUnit。 HtmlUnit是一个“Java程序的无GUI浏览器”。 http://htmlunit.sourceforge.net/

我有点偏向泽西岛 。 我们在所有项目中使用1.10,并没有遇到一个我们无法解决的问题。

我喜欢它的一些原因:

  • 提供者 – 在泽西岛创build了soap 1.1 / 1.2提供者,并且消除了为我们的JAX-WS调用使用庞大的AXIS的需要
  • filter – 创build数据库日志filter,logging整个请求(包括请求/响应头),同时防止敏感信息的logging。
  • 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/

拥有Jersey客户端的HTTPClient: https ://blogs.oracle.com/PavelBucek/entry/jersey_client_apache_http_client

我同意httpclient是一个标准的东西 – 但我想你正在寻找的select,所以…

Restlet提供了一个专门用于与Restful Web服务交互的http客户端。

示例代码:

  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/

我可以推荐你玉米 – 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> 

Google HTTP Java Client对我来说很好,因为它可以在Android和App Engine上运行。

我想提一下Ning Async Http Client Library 。 我从来没有用过它,但是我的同事对于我以前一直使用的Apache Http客户端来说就是一见钟情。 我特别感兴趣的是它是基于Netty这个高性能的asynchronousI / O框架的,我对它更加熟悉和高度重视。