HttpClient系列(四),Vert.x HttpClient

目录



正文


Vert.x Web客户端是易于使用的高级HTTP客户端。

打开Vert.x官网,点击Documentation菜单,在右侧在找到Web菜单点进去,就可以看到Web Client(也可以叫做HttpClient)了。这里有手册、API文档,并且有各种语言的案例。我们直接点击Java手册(Manual)。让我们一起用Java来调用Vert.x的Web Client。

点击手册进去,就可以看到Using the Web Client,有一句很直白的说明“要使用Vert.x Web Client,请将以下依赖项添加到构建描述符的“依赖项”部分”。

构建描述符,指的就是我们用来描述项目构建步骤的文件,其实就是pom.xml或者build.gradle文件。
笔者用的是maven,那么就直接将依赖配置复制到自己的pom.xml文件中去就可以了。

<dependency>
 <groupId>io.vertx</groupId>
 <artifactId>vertx-web-client</artifactId>
 <version>3.8.5</version>
</dependency>

Ok!都配置好了。
老规矩,直接上demo去GET一个http地址。

创建一个MainVerticle.java文件,写入以下代码:

import io.vertx.core.AbstractVerticle;
import io.vertx.core.Vertx;
import io.vertx.core.buffer.Buffer;
import io.vertx.ext.web.client.HttpResponse;
import io.vertx.ext.web.client.WebClient;


public class MainVerticle extends AbstractVerticle {
    public static void main(String[] args) {
        Vertx.vertx().deployVerticle(new MainVerticle());
    }

    @Override
    public void start() throws Exception {
        WebClient client = WebClient.create(vertx);
        client.getAbs("http://www.baidu.com").send(ar -> {
            if (ar.succeeded()) {
                HttpResponse<Buffer> response = ar.result();
                System.out.println(response.body().toString());
            } else {
                System.out.println("发送请求失败:" + ar.cause().getMessage());
            }
        });
    }
}

在Vert.x中一切皆Verticle,所以我们需要先创建一个Vertifcle然后在发布这个Verticle。在start方法中演示一个GET请求。这里需要留意GET方法有好几个,笔者使用的是getAbs,看名字就知道是绝对路径,其他的GET方法在使用时需要进行端口或者host配置,例如下面这段GET请求方式与上面结果是一样的:

client.get(80, "www.baidu.com", "/")
    .send(ar -> {
        if (ar.succeeded()) {
            HttpResponse<Buffer> response = ar.result();
            System.out.println(response.body().toString());
        } else {
            System.out.println("发送请求失败:" + ar.cause().getMessage());
        }
    });

一个Verticle可以看成是一个服务,那么就不在是一个单纯的程序进程,运行完就自动结束。在这里我们测试完后,记得手动结束服务。

接着在看一个POST请求。按时按照前面几章的老样子,模拟一个表单请求。

WebClient client = WebClient.create(vertx);
MultiMap map = MultiMap.caseInsensitiveMultiMap();
map.add("page", "1");
map.add("count", "5");
client.postAbs("https://api.apiopen.top/getWangYiNews").sendForm(map, ar -> {
    if (ar.succeeded()) {
        HttpResponse<Buffer> response = ar.result();
        System.out.println(response.body().toString());
    } else {
        System.out.println("发送请求失败:" + ar.cause().getMessage());
    }
});

注意看sendForm方法,send开头的方法有好几个。sendForm就是用来做表单数据提交的,接收一个MultiMap作为参数,MultiMap就是用来构造表单的。如果是POST JSON,那么就用sendJson或者sendJsonObject。

本博客采用 知识共享署名-禁止演绎 4.0 国际许可协议 进行许可

本文标题:HttpClient系列(四),Vert.x HttpClient

本文地址:https://dev-tang.com/post/2020/06/httpclient-vert.x.html

推荐阅读