mica-http

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

使用

maven

  1. <dependency>
  2. <groupId>net.dreamlu</groupId>
  3. <artifactId>mica-http</artifactId>
  4. <version>${version}</version>
  5. </dependency>

gradle

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

使用文档

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

示例代码1

  1. // 设置全局日志级别
  2. HttpRequest.setGlobalLog(LogLevel.BODY);
  3. // 直接用 jackson json path 语法
  4. private String getUserEmail(String accessToken) {
  5. return HttpRequest.get("https://api.linkedin.com/v2/emailAddress?q=members&projection=(elements*(handle~))")
  6. .addHeader("Host", "api.linkedin.com")
  7. .addHeader("Connection", "Keep-Alive")
  8. .addHeader("Authorization", "Bearer " + accessToken)
  9. .execute()
  10. .asJsonNode()
  11. .at("/elements/0/handle~0/emailAddress")
  12. .asText();
  13. }
  14. // 异步
  15. public static void test() {
  16. HttpRequest.post("https://www.baidu.com/do-stuff")
  17. .log(LogLevel.BASIC) // 日志级别
  18. .formBuilder() // 表单构造器
  19. .add("a", "b")
  20. .async() // 使用异步
  21. .onSuccessful(System.out::println) // 异步成功时的函数
  22. .onFailed((request, e) -> { // 异步失败,可无
  23. e.printStackTrace();
  24. })
  25. .execute();
  26. }

示例代码2

  1. HttpRequest.setGlobalLog(LogLevel.BODY);
  2. // 同步,异常时 返回 null
  3. String html = HttpRequest.get("www.baidu.com")
  4. .connectTimeout(Duration.ofSeconds(1000))
  5. .query("test", "a")
  6. .query("name", "張三")
  7. .query("x", 1)
  8. .query("abd", Base64Util.encode("123&$#%"))
  9. .queryEncoded("abc", Base64Util.encode("123&$#%"))
  10. .execute()
  11. .onFailed(((request, e) -> {
  12. e.printStackTrace();
  13. }))
  14. .onSuccess(ResponseSpec::asString);
  15. System.out.println(html);
  16. // 同步调用,返回 Optional,异常时返回 Optional.empty()
  17. Optional<String> opt = HttpRequest.post(URI.create("https://www.baidu.com"))
  18. .bodyString("Important stuff")
  19. .formBuilder()
  20. .add("a", "b")
  21. .execute()
  22. .onSuccessOpt(ResponseSpec::asString);
  23. // 同步,成功时消费(处理) response
  24. HttpRequest.post("https://www.baidu.com/some-form")
  25. .addHeader("X-Custom-header", "stuff")
  26. .execute()
  27. .onSuccessful(responseSpec -> {
  28. String text = responseSpec.asString();
  29. System.out.println(text);
  30. });
  31. // 同步,异常时直接抛出
  32. HttpRequest.get("https://www.baidu.com/some-form")
  33. .execute()
  34. .asString();
  35. // async,异步执行结果,失败时打印堆栈
  36. HttpRequest.get("https://www.baidu.com/some-form")
  37. .async()
  38. .onSuccessful(System.out::println)
  39. .onFailed((request, e) -> {
  40. e.printStackTrace();
  41. })
  42. .execute();

文档

开源推荐

关注我们

如梦技术-公众号.jpg

扫描上面二维码,更多精彩内容每天推荐!