从版本 2.3.2 开始 REST Assured 可以更好地支持代理。 例如,如果你有一个代理在 localhost 端口 8888 你可以做:
given().proxy("localhost", 8888). ..
如果服务器在本地环境中运行,可以不指定主机名:
given().proxy(8888). .. // Will assume localhost
要使用 HTTPS,需要提供第三个参数(scheme)或使用io.restassured.specification.ProxySpecification
。 例如:
given().proxy(host("localhost").withScheme("https")). ..
其中 host 从 io.restassured.specification.ProxySpecification 静态导入。
从版本 2.7.0 开始,您还可以为代理指定抢占式基本身份验证。 例如:
given().proxy(auth("username", "password")).when() ..
其中auth
是从io.restassured.specification.ProxySpecification静态导入的,也可以将身份验证与不同的 host 相结合:
given().proxy(host("http://myhost.org").withAuth("username", "password")). ..
可以为所有请求配置静态代理,例如:
RestAssured.proxy("localhost", 8888);
或者:
RestAssured.proxy = host("localhost").withPort(8888);
您还可以创建请求规范并在其中指定代理:
RequestSpecification specification = new RequestSpecBuilder().setProxy("localhost").build();
given().spec(specification). ..
详细配置由RestAssuredConfig实例提供,您可以使用它配置HTTP Client的参数以及重定向,日志,编码器,解码器,Session,ObjectMapper,Connection,SSL和ParamConfig 设置。 例子:
特定请求:
given().config(RestAssured.config().redirect(redirectConfig().followRedirects(false))). ..
或使用 RequestSpecBuilder:
RequestSpecification spec = new RequestSpecBuilder().setConfig(RestAssured.config().redirect(redirectConfig().followRedirects(false))).build();
或所有请求:
RestAssured.config = config().redirect(redirectConfig().followRedirects(true).and().maxRedirects(0));
config()
and newConfig()
can be statically imported from io.restassured.config.RestAssuredConfig
.
使用 [EncoderConfig](http://static.javadoc.io/io.rest-assured/rest-assured/3.0.1/io/restassured/config/EncoderConfig.htmlencoding),可以指定默认的内容 charset(如果没有在 content-type 头中指定)和查询参数 charset 为所有请求。 如果未指定内容字符集,则使用 ISO-8859-1,如果未指定查询参数字符集,则使用 UTF-8。 用法示例:
RestAssured.config = RestAssured.config().encoderConfig(encoderConfig().defaultContentCharset("US-ASCII"));
如果没有通过使用EncoderConfig中的 defaultCharsetForContentType 方法为此内容类型显式定义字符集,那么还可以指定用于特定内容类型的编码器字符集。 例如:
RestAssured.config = RestAssured.config(config().encoderConfig(encoderConfig().defaultCharsetForContentType("UTF-16", "application/xml")));
这将假设明确指定一个字符集的 “application / xml” 内容类型的 UTF-16 编码。 默认情况下,“application / json” 被指定为使用 “UTF-8” 作为默认内容类型,这是由 [RFC4627](https://www.ietf.org/rfc/rfc4627.txt)指定的。
默认情况下,REST Assured 会自动添加字符集标头。 要完全禁用这个,你可以这样配置EncoderConfig
:
RestAssured.config = RestAssured.config(config().encoderConfig(encoderConfig().appendDefaultContentCharsetToContentTypeIfUndefined(false));
使用 [DecoderConfig](http://static.javadoc.io/io.rest-assured/rest-assured/3.0.1/io/restassured/config/DecoderConfig.html),您可以将默认响应内容解码字符集设置为 所有响应。 如果您期望使用不同于 ISO-8859-1 的内容字符集(这是默认字符集),并且响应未在内容类型标头中定义字符集,那么这将非常有用。 用法示例:
RestAssured.config = RestAssured.config().decoderConfig(decoderConfig().defaultContentCharset("UTF-8"));
您还可以使用 “DecoderConfig” 来指定要应用哪些内容解码器。 当你这样做时,“Accept-Encoding” 头部将被自动添加到请求中,并且响应主体将被自动解码。 默认情况下,启用 GZIP 和 DEFLATE 解码器。 例如要删除 GZIP 解码但保留 DEFLATE 解码,您可以执行以下操作:
您还可以使用 “DecoderConfig” 来指定要应用哪些内容解码器。 当你这样做时,“Accept-Encoding” 头部将被自动添加到请求中,并且响应主体将被自动解码。 默认情况下,启用 GZIP 和 DEFLATE 解码器。 例如要删除 GZIP 解码但保留 DEFLATE 解码,您可以执行以下操作:
given().config(RestAssured.config().decoderConfig(decoderConfig().contentDecoders(DEFLATE))). ..
如果没有通过使用DecoderConfig中的 “defaultCharsetForContentType” 方法为此内容类型明确定义字符集,则还可以指定要用于特定内容类型的解码器字符集。 例如:
RestAssured.config = config(config().decoderConfig(decoderConfig().defaultCharsetForContentType("UTF-16", "application/xml")));
这将假设明确指定一个字符集的 “application / xml” 内容类型的 UTF-16 编码。 默认情况下,“application / json” 使用 “UTF-8” 作为默认字符集,这是由 [RFC4627](https://www.ietf.org/rfc/rfc4627.txt)指定的。
使用 Session 配置,您可以配置 REST Assured 使用的默认 session ID 名称。 默认 session id 名称是JSESSIONID
,如果应用程序中的名称不同,并且您希望使用 REST Assured 的 [会话支持](#Session_support),您只需更改它。 用法:
RestAssured.config = RestAssured.config().sessionConfig(new SessionConfig().sessionIdName("phpsessionid"));
重定向配置可以使用 DSL 指定。 例如。
given().redirects().max(12).and().redirects().follow(true).when(). ..
让您配置 REST Assured 的连接设置。 例如,如果要在每个响应后强制关闭 Apache HTTP Client 连接。 如果您在响应中使用少量数据进行大量快速连续请求,则可能需要执行此操作。然而,如果你正在下载(尤其是大量的)分块,你绝不能每个响应后关闭连接的数据。 默认情况下,连接在每个响应后不关闭。
RestAssured.config = RestAssured.config().connectionConfig(connectionConfig().closeIdleConnectionsAfterEachResponse());
JsonPathConfig允许您在 REST Assured 或 JsonPath使用时配置 Json 设置。 它让你配置如何处理 JSON 数字。
RestAssured.config = RestAssured.config().jsonConfig(jsonConfig().numberReturnType(NumberReturnType.BIG_DECIMAL))
为 REST Assured 将在执行请求时使用的 HTTP Client 实例配置属性。 默认情况下,REST Assured 会为每个 “given” 语句创建一个新的 http Client 实例。 要配置重用,请执行以下操作:
RestAssured.config = RestAssured.config().httpClient(httpClientConfig().reuseHttpClientInstance());
您还可以使用httpClientFactory
方法提供自定义 HTTP Client 实例,例如:
RestAssured.config = RestAssured.config().httpClient(httpClientConfig().httpClientFactory(
new HttpClientConfig.HttpClientFactory() {
@Override
public HttpClient createHttpClient() {
return new SystemDefaultHttpClient();
}
}));
注意,目前你需要提供一个AbstractHttpClient
的实例.
也可以配置默认参数等。
SSLConfig 允许您指定更高级的 SSL 配置,如信任库,密钥库类型和主机名验证器。 例如:
RestAssured.config = RestAssured.config().sslConfig(sslConfig().with().keystoreType(<type>).and().strictHostnames());
ParamConfig 允许您配置在 “冲突” 时,更新不同的参数。 默认情况下,所有参数都将合并,因此如果您执行以下操作:
given().queryParam("param1", "value1").queryParam("param1", "value2").when().get("/x"). ...
REST Assured 将发送一个查询字符串param1 = value1&param1 = value2
。
如果这不是您想要的,你可以配置 REST Assured 为 * replace * 值代替:
given().
config(config().paramConfig(paramConfig().queryParamsUpdateStrategy(REPLACE))).
queryParam("param1", "value1").
queryParam("param1", "value2").
when().
get("/x"). ..
REST Assured 现在将替换param1
的值为value2
(因为它是最后写的),而不是将它们合并在一起。 您也可以为所有参数类型的每种类型配置统一的更新策略
given().config(config().paramConfig(paramConfig().replaceAllParameters())). ..
也支持在 [Spring Mock Mvc 模块](# Spring Mock Mvc 模块)(配置 [MockMvcParamConfig](http://static.javadoc.io/io.restassured/spring-mock -mvc / 3.0.1 / io / restassured / module / mockmvc / config / MockMvcParamConfig.html)。