参数

请求参数可以通过全局配置,也可以为某个请求单独添加或者设置,一般情况下我们都会为某个请求单独设置。

Url参数和Body参数

示例中我们把请求分为Url类请求和Body类请求,Url类请的请求参数都是通过url发送的,也就是以?key=value&key=value的形式携带的。而Body类的请求即可以通过url携带,也可以通过RequestBody以流的形式发送。

在Kalle中,Url类的请求参数会自动携带的url中;Body类的请求参数分为url参数和Body参数,所以需要开发者指定参数是跟在url后面还是放在RequestBody中发送。

对于Url类请求,例如下面这段代码,最终的urlhttp://www.example.com?name=kalle&age=18:

Kalle.get("http://www.example.com")
    .param("name", "kalle")
    .params("age", 18)
    .perform(...);

对于Body类请求,例如下面这段代码,最终的urlhttp://www.example.com?name=kalle&age=18,但是RequestBody中也会发送sex=1&height=180cm:

Kalle.post("http://www.example.com")
    .urlParam("name", "kalle")
    .urlParam("age", 18)
    .param("sex", 1)
    .param("height", "180cm")
    .perform(...);

我们注意到,在Body类请求中,通过urlParam()添加的参数会拼接在url中,而通过param()方法添加的参数会通过RequestBody发送。

全局配置

如果有一部分参数是每一个请求都需要带上的,那么开发者可以在Kalle中添加全局配置,Kalle会自动为每一个请求加上这些参数:

Kalle.setConfig(
    KalleConfig.newBuilder()
        .addParam("name", "kalle")
        .addParam("name2", "okalle")
        .build()
);

这里需要注意的是,全局参数对于Url类的请求中会拼接在url中,对于Body类请求会通过RequestBody发送。

另外值得一提的是,全局参数也是可以被覆盖的,例如上面这段代码为每一个Request都添加了值为kallename参数,如果开发者想在某个Request修改这个值为new-value

Kalle.get("http://www.example.com")
    .param("name", "new-value")
    .perform(...);

单独指定

每一个Reuqest都可以添加自己的参数,这是几个示例:

List<String> nameList = ...;

Kalle.get("http://www.example.com")
    .param("name", "kalle")
    .params("nameList", nameList)
    .perform(...);

单独指定时使用Params对象:

Params params = new Params();
params.add("name", "kalle");
params.set("name", "okalle");

Kalle.get("http://www.example.com")
    .setParams(params)
    .perform(...);

Body类的请求还可以直接添加FileBinary模拟表单发送请求:

File file = ...;
Binary binary = ...;

Kalle.post("http://www.example.com")
    .file("header", file)
    .binary("banner", binary)
    .perform(...);

更多的用法也可以参考在示例

results matching ""

    No results matching ""