Jetty开发指导:HTTP Client

介绍

Jetty HTTP client模块提供易用的API、工具类和一个高性能、异步的实现来执行HTTP和HTTPS请求。
Jetty HTTP client模块要求Java版本1.7或者更高,Java 1.8的应用能用lambda表达式在一些HTTP client API中。
Jetty HTTP client被实现和提供一个异步的API,不会因为I/O时间阻塞,因此使它在线程的利用上更有效率,并很适合用于负载测试和并行计算。
然而,有时你所有需要做的是对一个资源执行一个GET请求,HTTP client也提供了一个异步API,发起请求的线程将阻塞直到请求处理完成。
在外部来看,Jetty HTTP client提供:
 1)重定向支持;重定向编码例如302或者303被自动跟随;
 2)Cookies支持;被服务端送的cookies在匹配的请求中被送回到服务端;
 3)认证支持;HTTP “Basic”和“Digest”热症被支持,其它的可以增加;
 4)前转协议支持。

初始化

主要的类的名称是org.eclipse.jetty.client.HttpClient,同Jetty 7和Jetty 8中一样(虽然它和Jetty 7和Jetty 8中的同名类不是向后兼容的)。
你可以将一个HttpClient实例看作一个浏览器实例。像一个浏览器,它能发起请求到不同的域,它管理重定向、cookies和认证,你能用代理配置它,并且他提供给你你发起的请求的响应。
为了使用HttpClient,你必须初始化它、配置它、然后启动它:

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

你能创建多个HttpClient的实例;原因可能是你想指定不同的配置参数(例如,一个实例被配置为前转代理而另一个不是),或者因为你想有两个实例履行象两个不同的浏览器,因此有不同的cookies、不同的认证证书等等。
当你用参数构造器创建一个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();

API介绍

阻塞API

为了履行一个HTTP请求更简单的方法是:

ContentResponse response = httpClient.GET(<a target=_blank href="http://domain.com/path?query">http://domain.com/path?query</a>);

方法HttpClient.GET(...)履行一个HTTP GET请求到一个给定的URI,成功后返回一个ContentResponse。
ContentResponse对象包含HTTP响应信息:状态码、headers和可能的内容。内容长度默认被限制到2M;下面“响应内容处理”会介绍怎么处理更大的内容。
如果你想定制请求,例如通过发起一个HEAD请求代替一个GET,并且仿真一个浏览器用户代理,你能使用这种方式:

ContentResponse response = httpClient.newRequest("http://domain.com/path?query")
        .method(HttpMethod.HEAD)
        .agent("Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:17.0) Gecko/20100101 Firefox/17.0")
        .send();

下面是采用简写的方式:

Request request = httpClient.newRequest("http://domain.com/path?query");
request.method(HttpMethod.HEAD);
request.agent("Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:17.0) Gecko/20100101 Firefox/17.0");
ContentResponse response = request.send();

你首先用httpClient.newRequest(...)创建了一个请求对象,然后你定制它。当请求对象被定制后,你调用Request.send(),当请求处理玩陈过后&

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值