HTTP协议使用示例
Mojito
Mojito Framework
使用示例: com.hanframework.mojito.config.HttpInstallerTest
一、构建一个非阻塞HTTP服务端
Installer 可以轻松构建HTTP服务端,只要编写 BusinessHandler 服务端业务处理器即可。
- startAsync 非阻塞构建
- start 阻塞构建
java
1 /**
2 * 构建http服务端
3 */
4 @Test
5 public void testHttpServer() throws Exception {
6
7 Installer.httpServer((channel, request) -> {
8 System.out.println("请求地址:" + request.getRequestURI());
9 System.out.println("请求头" + request.getHeaders());
10 System.out.println("请求参数:" + request.getRequestParams());
11 System.out.println("请求body:" + request.getBody());
12 return HttpResponseFacade.HTML("<h1>Hello</h1>");
13 }).startAsync(8080);
14
15 testHttpClient();
16
17 okHttpClientTest();
18 }二、构建HTTP客户端
1. 使用第三方包构建客户端
前面说了,HTTP是基于标准的HTTP协议,所以市面上的HttpClient都是支持的。如下使用 OkHttpClient 构建一个GET请求。
java
1 private void okHttpClientTest() {
2 OkHttpClient okHttpClient = new OkHttpClient();
3 Request request = new Builder().url("http://127.0.0.1:8080").get().build();
4 try (Response response = okHttpClient.newCall(request).execute()) {
5 if (!response.isSuccessful()) {
6 // ... handle failed request
7 System.out.println("发送失败");
8 } else {
9 String responseBody = response.body().string();
10 System.out.println("OkHttpClient处理返回:" + responseBody);
11 }
12 } catch (IOException e) {
13 // ... handle IO exception
14 }
15 }
162. 使用框架构建客户端
因为HTTP默认的请求类是 HttpRequestFacade 所以必须使用 HttpRequestBuilder 来进行构建请求。
- connect 建立连接
- close 关闭连接
注意:
http数据无状态协议,如果要保持连接要在请求头中指定。
addHeader(HttpHeaders.Names.CONNECTION, HttpHeaders.Values.KEEP_ALIVE)
java
1 /**
2 * 支持长连接
3 *
4 * @throws Exception 异常
5 */
6 private void testHttpClient() throws Exception {
7 Client<HttpRequestFacade, HttpResponseFacade> httpClient = Installer.httpClient();
8 httpClient.connect("127.0.0.1", 8080);
9 URI uri = new URI("/user/get");
10 HttpRequestBuilder httpRequestBuilder = new HttpRequestBuilder()
11 .GET(uri)
12 //设置长连接
13 .addHeader(HttpHeaders.Names.CONNECTION, HttpHeaders.Values.KEEP_ALIVE);
14 for (int i = 0; i < 10; i++) {
15 HttpRequestFacade httpRequestFacade = httpRequestBuilder.wrapBuild();
16 System.out.println("request-id-request-" + i + "-" + httpRequestFacade.getId());
17 MojitoFuture<HttpResponseFacade> httpResponseFacadeMojitoFuture = httpClient.sendAsync(httpRequestFacade);
18 System.out.println("request-id-response-" + i + "-" + httpResponseFacadeMojitoFuture.get().getId());
19 }
20 httpClient.close();
21 }