java - RESTAssured 禁用 URL 编码无法正常工作

标签 java url url-encoding rest-assured

我正在使用如下 URL 测试 HTTP Post 请求:

https://myurl.com/api/logs/%2Fvar%2Flog%2Fmessages?Api-Token=12332429nmdsafs

我禁用了 URL 编码,这里是我的发布请求:

RestAssured.given()
.contentType(JSON)
.log()
.all()
.urlEncodingEnabled(false)
.baseUri(RestAssured.baseURI)
.basePath(url)
.pathParam(LOG_PATH_PARAM_NAME, urlEncodeString(requireNonNull(logPath)))
.body(myJsonBody)
.when()
.post("/logs/{logPath}")
.then()
.statusCode(OK.getStatusCode());

我也尝试过这样:

RestAssured.given()
.contentType(JSON)
.log()
.all()
.urlEncodingEnabled(false)
.baseUri(RestAssured.baseURI)
.basePath(url)
.body(myJsonBody)
.when()
.post("/logs/" + urlEncodeString(requireNonNull(logPath)))
.then()
.statusCode(OK.getStatusCode());

这里是 urlEncodeString 方法:

private static String urlEncodeString(String value) throws UnsupportedEncodingException {
        return URLEncoder.encode(value, StandardCharsets.UTF_8.name()).replaceAll("\\+", "%20");
    }

现在的问题是我上面提到的 URL 被编码为以下内容:

https://myurl.com/api/logs/var/log/messages?Api-Token=12332429nmdsafs

有人知道这里出了什么问题吗?或者知道解决方法吗? 我已经尝试过双重逃脱。

编辑:

我刚刚发现禁用 URL 编码仅适用于 URL 参数。

最佳答案

尽管您认为 given().urlEncodingEnabled(isEnabled).spec()... 只会禁用 URL 参数的编码,但您也可以使用以下方法对 URL 本身执行相同的操作

RequestSpecification mySpec = new RequestSpecBuilder().setUrlEncodingEnabled(false)

例如,如果我想向此(确切的)URL 发出获取请求而不对其进行编码http://api.cheapbooks.com/mathbooks/location/$amazonbooks%2Fscience%2Fmath

RestAssured 的默认行为会将 URL 双重编码为​​:http://api.cheapbooks.com/mathbooks/location/%24amazonbook%252Fscience%2Fmath

但是,如果您创建像上面的 mySpec 这样的 RequestSpecification,其中 setUrlEncodingEnabled(false) 并且您通过执行以下任一操作发出 http 请求:

given().spec(mySpec)...

spec.setBaseUri(...)

这样你应该得到想要的结果

关于java - RESTAssured 禁用 URL 编码无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55019246/

相关文章:

java - 如何处理被拒绝的权限 Android M (EasyPermissions)

java - 如何使用 Google Spreadsheet API 将一个单元格的样式复制到另一个单元格中

objective-c - 如何将可触摸的 Url 链接添加到 UIAlertView 消息中的 url?

Java高精度秒表

php - 加密或隐藏 url 中发送的字符串

ASP.NET 从 URL 获取物理文件路径

html - 在 HTML href/src 属性中应编码除符号 (&) 之外的哪些其他字符?

c# - 如何对句点进行 URL 编码?

php - 在 Ruby 中编码 URL 参数,并用 php 正确解码它

java - Spring Boot Sql Date Timestamp Json 序列化问题