java http服务端客户端_编写 HTTP 服务器和客户端 – 编写 HTTP 客户端 - Java API 版本的 Vert.x Core 手册...

创建 HTTP 客户端

使用默认选项创建一个HttpClient实例,如下所示:

HttpClient client = vertx.createHttpClient();

如果您想要在创建时配置客户端的选项,如下所示:

HttpClientOptions options = new HttpClientOptions().setKeepAlive(false);

HttpClient client = vertx.createHttpClient(options);

发出请求

Http 客户端非常灵活,可以用各种方式请求。

http 客户端经常需要将许多请求发送到相同的主机/端口 。为了避免每次发出请求需要重复配置主机/端口,您可以配置客户端的默认主机/端口:

HttpClientOptions options = new HttpClientOptions().setDefaultHost("wibble.com");

// Can also set default port if you want...

HttpClient client = vertx.createHttpClient(options);

client.getNow("/some-uri", response -> {

System.out.println("Received response with status code " + response.statusCode());

});

或者可以指定单个请求的主机/端口。

HttpClient client = vertx.createHttpClient();

// Specify both port and host name

client.getNow(8080, "myserver.mycompany.com", "/some-uri", response -> {

System.out.println("Received response with status code " + response.statusCode());

});

// This time use the default port 80 but specify the host name

client.getNow("foo.othercompany.com", "/other-uri", response -> {

System.out.println("Received response with status code " + response.statusCode());

});

没有请求body简单的请求

通常情况下,你会想要与没有请求body的 HTTP 请求。这通常是 HTTP GET,OPTIONS和HEAD请求。

这是 Vert.x http 客户端的最简单方法,使用前缀与Now的方法。例如getNow。

这些方法创建HTTP请求,并在单个方法调用发送,让你提供一个处理程序,将与HTTP响应时调用它回来。

HttpClient client = vertx.createHttpClient();

// Send a GET request

client.getNow("/some-uri", response -> {

System.out.println("Received response with status code " + response.statusCode());

});

// Send a GET request

client.headNow("/other-uri", response -> {

System.out.println("Received response with status code " + response.statusCode());

});

编写普通的requests

不知道想要发送请求方法,运行时才知道。这个用例我们提供通用请求方法例如request,可以在运行时指定 HTTP 方法:

HttpClient client = vertx.createHttpClient();

client.request(HttpMethod.GET, "some-uri", response -> {

System.out.println("Received response with status code " + response.statusCode());

}).end();

client.request(HttpMethod.POST, "foo-uri", response -> {

System.out.println("Received response with status code " + response.statusCode());

}).end("some-data");

编写请求主体(bodies)

有时想要在requests里含有body,或者想写请求的headers。

可以使用post方法,或者普通的request方法

这些方法发送的请求不会立即返回,而是返回HttpClientRequest实例,用于写入body和header。

下面是一些写入body和header的 POST 请求的例子:

HttpClient client = vertx.createHttpClient();

HttpClientRequest request = client.post("some-uri", response -> {

System.out.println("Received response with status code " + response.statusCode());

});

// Now do stuff with the request

request.putHeader("content-length", "1000");

request.putHeader("content-type", "text/plain");

request.write(body);

// Make sure the request is ended when you're done with it

request.end();

// Or fluently:

client.post("some-uri", response -> {

System.out.println("Received response with status code " + response.statusCode());

}).putHeader("content-length", "1000").putHeader("content-type", "text/plain").write(body).end();

// Or event more simply:

client.post("some-uri", response -> {

System.out.println("Received response with status code " + response.statusCode());

}).putHeader("content-type", "text/plain").end(body);

默认utf-8编码:

request.write("some data");

// Write string encoded in specific encoding

request.write("some other data", "UTF-16");

// Write a buffer

Buffer buffer = Buffer.buffer();

buffer.appendInt(123).appendLong(245l);

request.write(buffer);

如果你的 HTTP 请求只写入单个字符串或缓冲区,你可以写它和结束end函数单一调用中的请求。

request.end("some simple data");

// Write buffer and end the request (send it) in a single call

Buffer buffer = Buffer.buffer().appendDouble(12.34d).appendLong(432l);

request.end(buffer);

当你写到一个请求时,write第一次调用会导致写入网络的请求标头。

实际的写操作是异步的之前一段时间后调用已返回, 不是可能发生。

非分块请求正文与 HTTP 请求需要要提供的Content-Length标头。

因此,如果您不使用分块的 HTTP 然后之前,必须设置Content-Length标头写入请求,否则它将太迟了。

如果您正在调用接受字符串或缓冲区的end方法之一然后 Vert.x 将自动计算并设置Content-Length标头在写请求正文之前。

如果您使用的 HTTP 分块Content-Length标头不是必需的所以你不需要计算的前期的大小。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值