You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何创建模拟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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 04:24:42