Jetty HTTPClient(一)

Introduction

Jetty的HTTP客户端模块提供易于使用的API和实用工具类来执行HTTP(或HTTPS)请求。

Jetty的HTTP客户端是非阻塞和异步的。 它提供了一个永不阻塞IO的异步API,使其对于线程的利用上非常高效,非常适合于诸如负载测试或并行计算等性能要求高的场景。

当然了,如果你的需求仅仅只是对于某个资源执行一个GET请求,那么Jetty同样也提供了同步的api,发出请求的线程将会被阻塞,直到整个会话完成。

FastCGI传输在Jetty的FastCGI支持中大量使用,允许Jetty作为PHP的反向代理(完全像Apache或Nginx),因此能够服务于例如WordPress网站。

HTTP2传输允许Jetty的HTTP客户端使用HTTP2,可以向启用了HTTP2的网站发送请求,另请参阅Jetty的HTTP2支持。

Jetty HTTP客户端的开箱即用功能包括:

  • 重定向支持 - 状态码如302或303将会被自动重定向。
  • Cookie支持 - 由服务器发送的Cookie被存储并发送回匹配请求的服务器。
  • 验证支持 - 支持HTTP“Basic”和“Digest”身份验证,其他是可插拔的。
  • 代理支持 - HTTP代理和SOCKS4代理。

Starting HttpClient

主类名为org.eclipse.jetty.client.HttpClient

您可以把HttpClient的实例当作一个浏览器。 正如浏览器一样,它可以发送请求到不同的域,它管理重定向,Cookie和身份验证,您可以为它配置代理,并为您发出的请求作出响应。

为了使用HttpClient,您必须实例化、配置、然后启动:

 // Instantiate 
HttpClientHttpClient httpClient = new HttpClient();
// Configure HttpClient, for example:
httpClient.setFollowRedirects(false);
// Start 
HttpClienthttpClient.start();

您可以创建多个HttpClient实例,但通常情况下一个应用程序中一个实例就足够了。 在特殊场景下可能需要多个HttpClient实例,这些场景包括但不限于:

  • 您要指定不同的配置参数(例如,一个实例配置有转发代理,而另一个实例不配置)。
  • 您希望两个实例的行为像两个不同的浏览器,因此具有不同的cookie,不同的身份验证凭证等。
  • 您希望使用不同的传输协议。

当您使用无参数构造函数创建HttpClient实例时,您将只能执行HTTP请求,无法执行HTTPS请求。

为了执行HTTPS请求,您应该首先创建一个SslContextFactory,进行配置,并将其传递给HttpClient构造函数。 当使用SslContextFactory创建时,HttpClient将能够对任何域执行HTTP和HTTPS请求。

// Instantiate and configure the SslContextFactory
SslContextFactory sslContextFactory = new SslContextFactory();
// Instantiate HttpClient with the SslContextFactory
HttpClient httpClient = new HttpClient(sslContextFactory);
// Configure HttpClient, for example:
httpClient.setFollowRedirects(false);
// Start HttpClient
httpClient.start();

Stopping HttpClient

建议应用程序停止时,同时关闭正在使用中的HttpClient实例。

httpClient.stop();

停止HttpClient会确保其所持有的内存(例如身份验证凭据,Cookie等)被释放,线程池和调度程序被正确停止,允许HttpClient使用的所有线程退出。


  • 以上内容翻译自http://www.eclipse.org/jetty/documentation

你可能感兴趣的:(Jetty HTTPClient(一))