mica-http 是基于 okhttp 的封装,提供了 Fluent 语法的 http 工具包。mica-http 的语法简单易懂,同时还具有更好的性能和更高的安全性(自动关闭资源)。另外 mica-http 带有 http 请求日志打印功能,
<dependency> <groupId>net.dreamlu</groupId> <artifactId>mica-http</artifactId> <version>2.7.18.1</version></dependency>
String html = HttpRequest.get("https://www.baidu.com") .useConsoleLog() // 日志,同类有useSlf4jLog()和useLog(log::info),日志级别默认为 BODY .execute() // 执行,这里并非正在执行,这里只是转换成了执行对象 .asString(); // 真正行并转换结果System.out.println(html);
// 发送异步请求HttpRequest.delete("https://www.baidu.com") .async() // 开启异步 .onFailed((request, e) -> { // 异常时的处理 e.printStackTrace(); }) .onResponse(responseSpec -> { // 消费响应, 注意:响应的流只能读一次 int httpCode = responseSpec.code(); }) .onSuccessful(responseSpec -> { // 消费响应成功 http code in [200..300) // 注意:响应结果流只能读一次 JsonNode jsonNode = responseSpec.asJsonNode(); }) .execute(); // 异步最后发起请求
// 同步请求 url,方法支持 get、post、patch、put、deleteHttpRequest.get("https://www.baidu.com/{param1}/{param2}") // 使用 Slf4j 日志 .useSlf4jLog() // url 路径参数处理 .pathParam("param1", "abc1") .pathParam("param2", "abc2") // 添加 header .addHeader("x-account-id", "mica001") // 添加 cookie .addCookie(builder -> builder.domain("www.baidu.com").name("name").value("value")) // 设置 url 请求参数,默认进行 url encode .query("q", "mica") .queryEncoded("name", "encodedValue") // 对结果集进行断言重试 .retryOn(responseSpec -> !responseSpec.isOk()) // 设置代理 .proxy(InetSocketAddress.createUnresolved("127.0.0.1", 8080)) // 表单构造器,同类 multipartFormBuilder 文件上传表单构造器 .formBuilder() // 表单参数 .add("id", 123123) // 发起请求 .execute() // 结果集转换,注:如果网络异常等会直接抛出异常,当然你还可以使用 onResponse、onSuccess 处理 .asJsonNode();// 同类的方法有 asString、asBytes// json 类响应:asJsonNode、asValue、asList、asMap、atJsonPath等,采用 jackson 处理// file 文件:toFile// 转换成文件上传的 Part:asPart 系列方法。
全局日志配置:
// 设定全局日志级别 **NONE**(不打印日志)、 **BASIC**(只打印请求行和响应行)、 **HEADERS**(在BASIC的基础上打印出请求头)、 **BODY**(在BASIC的基础上打印出请求和响应体)HttpRequest.setGlobalLog(LogLevel.BODY);// 设置控制台日志,用于没有日志依赖的 sdk 开发时使用HttpRequest.setGlobalLog(HttpLogger.Console, LogLevel.BODY);// 当然你也可以设定为自己的 log,这样就不用把 **net.dreamlu.mica.http** 包的日志设置为 info 级别。HttpRequest.setGlobalLog(log::info);
自定义 OkHttpClient
OkHttpClient httpClient = new OkHttpClient.Builder() .build();HttpRequest.setHttpClient(httpClient);
默认内置了 InMemoryCookieManager,会自动保存和使用 cookie,另外可以自定义实现 okhttp 的 CookieJar。
InMemoryCookieManager cookieManager = new InMemoryCookieManager();HttpRequest.get("http://fast.dreamlu.net/api/auth/captcha") .cookieManager(cookieManager) .execute() .asString();
http 压测结果报告
Benchmark Mode Cnt Score Error UnitsMicaHttpBenchmark.micaHttp thrpt 5 899.299 ± 208.080 ops/minMicaHttpBenchmark.okHttp thrpt 5 841.669 ± 106.094 ops/minMicaHttpBenchmark.protoTypeOkHttp thrpt 5 346.647 ± 23.664 ops/min
Benchmark Mode Cnt Score Error UnitsMicaHttpBenchmark.micaHttp thrpt 5 876.651 ± 276.569 ops/minMicaHttpBenchmark.okHttp thrpt 5 899.365 ± 194.188 ops/minMicaHttpBenchmark.protoTypeOkHttp thrpt 5 341.028 ± 34.713 ops/min
Benchmark Mode Cnt Score Error UnitsMicaHttpBenchmark.micaHttp thrpt 5 944.017 ± 175.509 ops/minMicaHttpBenchmark.okHttp thrpt 5 875.143 ± 164.594 ops/minMicaHttpBenchmark.protoTypeOkHttp thrpt 5 331.370 ± 19.136 ops/min
mica-http 在执行时会使用 try-with-resource语法自动关流,所以在使用时不用担心流关闭问题。
本文链接:http://www.28at.com/showinfo-26-68320-0.html我爱说实话,Mica-Http 超好用!
声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com