1.概述

此快速教程将展示如何配置Apache HttpClient 4以自动遵循用于发布请求的重定向。

如果你想深入挖掘并学习与httpclient - 头部可以做的其他很酷的事情主httpclient教程

缺省情况下,只遵循仅获取导致重定向的请求。如果任何一个帖子请求HTTP 301永久移动或者332发现-重定向不会自动遵循

这是由http rfc 2616.

如果响应于GET或HEAD以外的请求接收到301状态代码,则用户代理程序不得自动重定向请求,除非用户可以确认,因为这可能会改变所发出请求的条件。

当然,我们需要更改该行为并放松严格的HTTP规范。

首先,让我们检查默认的行为:

@test public void给dpostrequest_whenonsumingurlwhichredirects_thennotrediredivected()抛出client procolocolexception,ioException {httpclient instance = httpclientbuilder.create()。build();httpresponse响应= instance.execute(新的httppost(“http://t.co/i5yd9tddw”));asserthat(response.getsstatusline()。getstatuscode(),等于(301));}

如你看到的,默认情况下,重定向不合时,我们回来了301状态码

2.在HTTP POST上重定向

2.1。在HttpClient 4.3之后

在HttpClient 4.3中,为创建和配置客户端引入了一个更高级别的API:

@test public voidediredirectingpost_whenonsumingurlwhichredirectswithpost_thenredirction()抛出client procolocolexception,ioException {httpclient instance = httpclientbuilder.create()。setredirectstrategy(new laxredirectstrategy())。build();httpresponse响应= instance.execute(新的httppost(“http://t.co/i5yd9tddw”));assertthat(response.getstatusline()。getstatuscode(),等于(200));}

注意httpclientBuilder.现在是流利API的起点这允许以比以前更可读的方式完全配置客户端。

2.2。对于httpclient 4.2

在以前版本的HttpClient(4.2)中,我们可以直接在客户端上配置重定向策略:

@suppresswarnings(“弃用”)@test public voidediredirectingpost_whenconsumingurlwhichredirectswithpost_thenredirction()抛出client proclecolexception,ioException {defaulthttpclient client = new defeaulthttpclient();client.setredirectstrategy(new laxredirectstrategy());httpresponse response = client.execute(新的httppost(“http://t.co/i5yd9tddw”));assertthat(response.getstatusline()。getstatuscode(),等于(200));}

请注意,现在有新的laxredirectstinggy.,HTTP限制是放松的重定向跟踪了帖子- 导致一个200 OK.状态码。

2.3。pre httpclient 4.2

在httpclient 4.2之前,laxredirectstinggy.课程并不存在,所以我们需要滚动自己的:

@Test public voidedredirectingpost_whenonsumingurlwhichredirectswithpost_thenredirction()抛出client procolocolexception,ioException {defaulthttpclient client = new defaulthttpclient();client.setredirectstrategy(new defaureTredirectstrategy(){/ **可重定向方法for(string m:redirect_methods){if(sequalsignorecase(方法)){return true;}}返回false;}});httpresponse response = client.execute(新的httppost(“http://t.co/i5yd9tddw”));assertthat(response.getstatusline()。getstatuscode(),等于(200));}

3.结论

此快速指南说明了如何配置Apache HttpClient 4的任何版本,以便在HTTP POST请求中遵循重定向,并放松严格的HTTP标准。

所有这些示例和代码片段的实现可以找到我的github项目- 这是一个基于Eclipse的项目,因此应该易于导入和运行。

通用底部

使用Spring 5和Spring Boot 2开始,通过学习春天课程:

>>查看课程
本文评论关闭!