如何创建模拟301永久重定向的org.apache.http.HttpResponse对象?重定向URL存于何处?
模拟301 MOVED_PERMANENTLY HttpResponse并设置重定向URL
兄弟,我懂你要啥了!你之前会Mock 200 OK的响应,现在要搞301永久重定向对吧?关键就是那个**Location响应头**——这就是放重定向URL的地方,HTTP协议里所有3xx重定向响应都靠这个头告诉客户端跳转目标。我给你两种常见的实现方式,适配不同的Mock场景:
方式1:用Apache HttpCore的BasicHttpResponse直接创建
如果你的测试不需要完全Mock,而是用真实的HttpResponse子类来模拟,这种方式最简单:
import org.apache.http.HttpResponse; import org.apache.http.HttpVersion; import org.apache.http.message.BasicHttpResponse; import org.apache.http.HttpStatus; // 创建301状态的响应实例 HttpResponse mock301Response = new BasicHttpResponse( HttpVersion.HTTP_1_1, HttpStatus.SC_MOVED_PERMANENTLY, "Moved Permanently" ); // 给响应添加Location头部,设置跳转目标URL(这里模拟http转https的场景) mock301Response.addHeader("Location", "https://www.your-target-domain.com/new-endpoint");
方式2:用Mockito完全Mock HttpResponse对象
如果你已经在Mockito的Mock环境里,需要完全模拟HttpResponse的行为,可以这样写:
import org.apache.http.HttpResponse; import org.apache.http.Header; import org.apache.http.message.BasicHeader; import org.apache.http.StatusLine; import org.apache.http.HttpStatus; import static org.mockito.Mockito.*; // Mock核心的HttpResponse对象 HttpResponse mockResponse = mock(HttpResponse.class); // 模拟状态行:返回301状态码和对应描述 StatusLine mockStatusLine = mock(StatusLine.class); when(mockStatusLine.getStatusCode()).thenReturn(HttpStatus.SC_MOVED_PERMANENTLY); when(mockStatusLine.getReasonPhrase()).thenReturn("Moved Permanently"); when(mockResponse.getStatusLine()).thenReturn(mockStatusLine); // 模拟Location头部:设置跳转的目标URL(比如跳转到其他域名) Header locationHeader = new BasicHeader("Location", "https://another-domain.com/redirected-path"); // 覆盖getFirstHeader的行为 when(mockResponse.getFirstHeader("Location")).thenReturn(locationHeader); // 如果你的代码会调用getHeaders,也可以补充这个模拟 when(mockResponse.getHeaders("Location")).thenReturn(new Header[]{locationHeader});
关键注意点
- 301响应必须包含
Location头,否则客户端不知道要跳转到哪里,这是HTTP协议的标准要求 - 你可以把
Location的值设置为任何合法URL:https地址、其他域名、同域名不同路径都可以,完全匹配你要测试的场景 - 如果你的HttpClient配置了自动重定向(默认可能开启),测试时可以验证它是否正确跟随了跳转;如果是手动处理重定向,就验证代码是否正确读取了
Location头的值
内容的提问来源于stack exchange,提问作者Luk
相关产品推荐
相关产品推荐

