我已经在这个问题上坚持了几个星期了(我对放心完全陌生),我需要社区的帮助。
我的问题是,我正在尝试向 oauth2/authorize 端点发出 GET 请求,我将我知道 Oauth 需要进行身份验证的所有内容作为参数传递给该端点。
执行 GET 时的预期行为是 API 返回 302 代码,并在响应标头中返回 Location 参数以及应传递给下一个请求的代码。
只要在配置中我有“自动遵循重定向。遵循 HTTP 3xx 响应作为重定向”,这种行为就会在 Postman 中成功发生。选项已禁用。
如果我选中它,那么什么都不起作用,因为我收到“504 Gateway”错误。
我在 Rest-Assured 中发现了同样的错误,因为这个 Postman 选项永远不允许重定向,所以我无法在 Rest-Assured 代码中重新创建它。重定向总是会发生,我希望得到帮助来避免它。 如何像在 Postman 中那样在 Rest Assured 中禁用 GET 重定向?
given().log().all().
redirects().follow(false).
headers(headers).
pathParam("idClient", config.getProperty("idClient")).
pathParam("token", token).
pathParam("codeChallenge", config.getProperty("codeChallenge")).
pathParam("scope", config.getProperty("scope")).
pathParam("redirectURI", config.getProperty("redirectURI")).
pathParam("state", config.getProperty("state")).
when().
get(oAuthUrl + "{idClient}&code_challenge={codeChallenge}&code_challenge_method=S256&response_type=code&scope={scope}&redirect_uri={redirectURI}&csrf={token}&decision=allow&state={state}");
我尝试过使用redirects().follow(false)。和其他避免重定向的方法,如 .followRedirects(false),我已在给定的时间和时间之间移动了此规则,我尝试尝试捕获 504 错误并强制其为 302...没有任何效果。你能帮助我吗?提前非常感谢您。
RestAssured
可以很好地处理重定向。您可以在 https://httpbin.org/ 的帮助下调试您的解决方案
测试以下重定向:
public static void main(String[] args) throws IOException {
String body = RestAssured
.given()
.redirects()
.follow(true)
.get("https://httpbin.org/redirect-to?url=https://httpbin.org/get")
.body().asString();
System.out.println(body);
}
将打印:
{
"args": {},
"headers": {
"Accept": "*/*",
"Accept-Encoding": "gzip,deflate",
"Host": "httpbin.org",
"User-Agent": "Apache-HttpClient/4.5.13 (Java/11.0.22)",
"X-Amzn-Trace-Id": "Root=1-6647bfce-45ba1d827e4f570f4491c613"
},
"origin": "31.134.139.220",
"url": "https://httpbin.org/get"
}
同时:
public static void main(String[] args) throws IOException {
String targetLocation = RestAssured
.given()
.redirects()
.follow(false)
.get("https://httpbin.org/redirect-to?url=https://httpbin.org/get")
.header("Location");
System.out.println(targetLocation);
}
将打印:
https://httpbin.org/get
这正是我在第一个示例中重定向的位置。发生这种情况是因为您使用
.redirects().follow(false)
抑制重定向,因此您可以获得重定向响应的标头。