HTTP协议使用示例

西魏陶渊明 ... 2022-8-22 Mojito 大约 1 分钟

# Mojito Framework

使用示例: com.hanframework.mojito.config.HttpInstallerTest

# 一、构建一个非阻塞HTTP服务端

Installer 可以轻松构建HTTP服务端,只要编写 BusinessHandler 服务端业务处理器即可。

  • startAsync 非阻塞构建
  • start 阻塞构建
    /**
     * 构建http服务端
     */
    @Test
    public void testHttpServer() throws Exception {

        Installer.httpServer((channel, request) -> {
            System.out.println("请求地址:" + request.getRequestURI());
            System.out.println("请求头" + request.getHeaders());
            System.out.println("请求参数:" + request.getRequestParams());
            System.out.println("请求body:" + request.getBody());
            return HttpResponseFacade.HTML("<h1>Hello</h1>");
        }).startAsync(8080);

        testHttpClient();

        okHttpClientTest();
    }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

# 二、构建HTTP客户端

# 1. 使用第三方包构建客户端

前面说了,HTTP是基于标准的HTTP协议,所以市面上的HttpClient都是支持的。如下使用 OkHttpClient 构建一个GET请求。

    private void okHttpClientTest() {
        OkHttpClient okHttpClient = new OkHttpClient();
        Request request = new Builder().url("http://127.0.0.1:8080").get().build();
        try (Response response = okHttpClient.newCall(request).execute()) {
            if (!response.isSuccessful()) {
                // ... handle failed request
                System.out.println("发送失败");
            } else {
                String responseBody = response.body().string();
                System.out.println("OkHttpClient处理返回:" + responseBody);
            }
        } catch (IOException e) {
            // ... handle IO exception
        }
    }

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

# 2. 使用框架构建客户端

因为HTTP默认的请求类是 HttpRequestFacade 所以必须使用 HttpRequestBuilder 来进行构建请求。

  • connect 建立连接
  • close 关闭连接

注意: http数据无状态协议,如果要保持连接要在请求头中指定。 addHeader(HttpHeaders.Names.CONNECTION, HttpHeaders.Values.KEEP_ALIVE)

    /**
     * 支持长连接
     *
     * @throws Exception 异常
     */
    private void testHttpClient() throws Exception {
        Client<HttpRequestFacade, HttpResponseFacade> httpClient = Installer.httpClient();
        httpClient.connect("127.0.0.1", 8080);
        URI uri = new URI("/user/get");
        HttpRequestBuilder httpRequestBuilder = new HttpRequestBuilder()
                .GET(uri)
                //设置长连接
                .addHeader(HttpHeaders.Names.CONNECTION, HttpHeaders.Values.KEEP_ALIVE);
        for (int i = 0; i < 10; i++) {
            HttpRequestFacade httpRequestFacade = httpRequestBuilder.wrapBuild();
            System.out.println("request-id-request-" + i + "-" + httpRequestFacade.getId());
            MojitoFuture<HttpResponseFacade> httpResponseFacadeMojitoFuture = httpClient.sendAsync(httpRequestFacade);
            System.out.println("request-id-response-" + i + "-" + httpResponseFacadeMojitoFuture.get().getId());
        }
        httpClient.close();
    }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

本文由西魏陶渊明版权所有。如若转载,请注明出处:西魏陶渊明
上次编辑于: 2022年8月22日 09:35
贡献者: lxchinesszz