美文网首页
Jetty HTTPClient(一)

Jetty HTTPClient(一)

作者: 挺搞笑的 | 来源:发表于2017-09-26 17:22 被阅读351次

    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使用的所有线程退出。


    相关文章

      网友评论

          本文标题:Jetty HTTPClient(一)

          本文链接:https://www.haomeiwen.com/subject/dtteextx.html