mica-http 完全使用指南【一】

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: mica-httpmica-http 是 okhttp 的封装,Fluent 语法的 http 工具包,语法参考 HttpClient Fluent API。使用maven<dependency> <groupId>net.

mica-http

mica-httpokhttp 的封装,Fluent 语法的 http 工具包,语法参考 HttpClient Fluent API。

使用

maven

<dependency>
  <groupId>net.dreamlu</groupId>
  <artifactId>mica-http</artifactId>
  <version>${version}</version>
</dependency>

gradle

compile("net.dreamlu:mica-http:${version}")

使用文档

  • 设定全局日志级别 NONE,BASIC,HEADERS,BODY, 默认:NONE
HttpRequest.setGlobalLog(LogLevel.BODY);
  • 同步请求 url,方法支持 get、post、patch、put、delete
HttpRequest.get("https://www.baidu.com")
    .log(LogLevel.BASIC)             //设定本次的日志级别,优先于全局
    .addHeader("x-account-id", "mica001") // 添加 header
    .addCookie(new Cookie.Builder()  // 添加 cookie
        .name("sid")
        .value("mica_user_001")
        .build()
    )
    .query("q", "mica") //设置 url 参数,默认进行 url encode
    .queryEncoded("name", "encodedValue")
    .formBuilder()    // 表单构造器,同类 multipartFormBuilder 文件上传表单
    .add("id", 123123) // 表单参数
    .execute()                      // 发起请求
    .asJsonNode();                  // 结果集转换,注:如果网络异常等会直接抛出异常。
// 同类的方法有 asString、asBytes、asStream
// json 类响应:asJsonNode、asValue、asList、asMap,采用 jackson 处理
// xml、html响应:asDocument,asDomValue、asDomList采用的 jsoup 处理
// file 文件:toFile
  • 同步
String html = HttpRequest.post("https://www.baidu.com")
    .execute()
    .onFailed((request, e) -> {// 网络等异常情况的消费处理,可无
        e.printStackTrace();
    })
    .onResponse(ResponseSpec::asString);// 处理响应,有网络异常等直接返回 null
  • 同步
String text = HttpRequest.patch("https://www.baidu.com")
    .execute()
    .onSuccess(ResponseSpec::asString);
// onSuccess http code in [200..300) 处理响应,有网络异常等直接返回 null
  • 异步请求
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(); // 异步最后发起请求

示例代码1

// 设置全局日志级别
HttpRequest.setGlobalLog(LogLevel.BODY);

// 直接用 jackson json path 语法
private String getUserEmail(String accessToken) {
    return HttpRequest.get("https://api.linkedin.com/v2/emailAddress?q=members&projection=(elements*(handle~))")
            .addHeader("Host", "api.linkedin.com")
            .addHeader("Connection", "Keep-Alive")
            .addHeader("Authorization", "Bearer " + accessToken)
            .execute()
            .asJsonNode()
            .at("/elements/0/handle~0/emailAddress")
            .asText();
}

// 异步
public static void test() {
    HttpRequest.post("https://www.baidu.com/do-stuff")
        .log(LogLevel.BASIC)                // 日志级别
        .formBuilder()                      // 表单构造器
        .add("a", "b")
        .async()                            // 使用异步
        .onSuccessful(System.out::println)  // 异步成功时的函数
        .onFailed((request, e) -> {         // 异步失败,可无
            e.printStackTrace();
        })
        .execute();
}

示例代码2

HttpRequest.setGlobalLog(LogLevel.BODY);

// 同步,异常时 返回 null
String html = HttpRequest.get("www.baidu.com")
    .connectTimeout(Duration.ofSeconds(1000))
    .query("test", "a")
    .query("name", "張三")
    .query("x", 1)
    .query("abd", Base64Util.encode("123&$#%"))
    .queryEncoded("abc", Base64Util.encode("123&$#%"))
    .execute()
    .onFailed(((request, e) -> {
        e.printStackTrace();
    }))
    .onSuccess(ResponseSpec::asString);
System.out.println(html);

// 同步调用,返回 Optional,异常时返回 Optional.empty()
Optional<String> opt = HttpRequest.post(URI.create("https://www.baidu.com"))
    .bodyString("Important stuff")
    .formBuilder()
    .add("a", "b")
    .execute()
    .onSuccessOpt(ResponseSpec::asString);

// 同步,成功时消费(处理) response
HttpRequest.post("https://www.baidu.com/some-form")
    .addHeader("X-Custom-header", "stuff")
    .execute()
    .onSuccessful(responseSpec -> {
        String text = responseSpec.asString();
        System.out.println(text);
    });

// 同步,异常时直接抛出
HttpRequest.get("https://www.baidu.com/some-form")
    .execute()
    .asString();

// async,异步执行结果,失败时打印堆栈
HttpRequest.get("https://www.baidu.com/some-form")
    .async()
    .onSuccessful(System.out::println)
    .onFailed((request, e) -> {
        e.printStackTrace();
    })
    .execute();

文档

开源推荐

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
数据采集 Java Spring
mica 1.1.7 发布 mica-http 毕业从 http 到轻量级爬虫
mica(云母) mica 云母,寓意为云服务的核心,增强 Spring cloud 功能,使得 Spring cloud 服务开发更加方便快捷。 mica 核心依赖 mica 基于 java 8,没有历史包袱,支持传统 Servlet 和 Reactive(webflux)。
1262 0
|
数据采集 微服务 Java
mica-http 从 http 工具到爬虫【二】
1. 介绍      本篇接上篇《mica-http 完全使用指南》,mica-http 自从 v1.1.3 加入到 mica 最近几周一直在打磨,逐渐成为了一个轻量级爬虫工具。      注意:今天的文章主要是图博,部分功能会在 mica v1.1.7 正式发布,欢迎 star。
1104 0
|
数据格式 安全 XML
HttpComponents (http 客户端) 常用类简介
http://hc.apache.org/ 阿帕奇的开源项目。用于Http通信。 &lt;dependency&gt; &lt;groupId&gt;org.apache.httpcomponents&lt;/groupId&gt; &lt;artifactId&gt;httpclient&lt;/artifactId&gt; &lt;version&gt;4.5.1&l
1617 0
|
网络协议 Java 应用服务中间件
【JavaWeb】Http协议及Servlet快速入门
本期主要介绍Http协议及Servlet快速入门
183 0
【JavaWeb】Http协议及Servlet快速入门
|
存储 缓存 自然语言处理
http协议基础教程
HTTP 是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出,经过几年的使用与发展,得到不断地完善和 扩展。目前在WWW中使用的是HTTP/1.0的第六版,HTTP/1.1的规范化工作正在进行之中,而且HTTP-NG(Next Generation of HTTP)的建议已经提出。
196 0
http协议基础教程
|
Web App开发 缓存 Java
Tomcat服务器常用配置和HTTP简介
国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html 内部邀请码:C8E245J (不写邀请码,没有现金送)国内私募机构九鼎控股打造,九鼎投资是在全国股份转让系统挂牌的公众公司,股票代码为430719,为“中国PE第一股”,市值超1000亿元。
1135 0
|
开发框架 前端开发 Linux
开源项目推荐:C++ Web/Http Server/Rest开发框架(请重点关注Oat++和搜狗workflow)
开源项目推荐:C++ Web/Http Server/Rest开发框架(请重点关注Oat++和搜狗workflow)
4306 0
|
XML 编解码 Java
SpringBoot项目优雅的Http客户端工具,太香了!
SpringBoot项目优雅的Http客户端工具,太香了!
573 0
|
9月前
|
域名解析 缓存 网络协议
JavaEE精选-HTTP
JavaEE精选-HTTP
61 1

热门文章

最新文章