HTTP协议使用示例
西魏陶渊明 ... 2022-8-22 大约 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
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
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
本文由西魏陶渊明版权所有。如若转载,请注明出处:西魏陶渊明