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

时间:2019-03-06 09:06:43

标签: 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参数。

1 个答案:

答案 0 :(得分:0)

尽管您正确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(...)

您应该以这种方式获得预期的结果

相关问题