您现在的位置是:首页 > 文章详情

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

日期:2019-07-29点击:315

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();

文档

开源推荐

原文链接:https://yq.aliyun.com/articles/711804
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章