mica-http
是 okhttp
的封裝,Fluent 語法的 http 工具包,語法參考 HttpClient Fluent API。html
<dependency>
<groupId>net.dreamlu</groupId>
<artifactId>mica-http</artifactId>
<version>${version}</version>
</dependency>
複製代碼
compile("net.dreamlu:mica-http:${version}")
複製代碼
HttpRequest.setGlobalLog(LogLevel.BODY);
複製代碼
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(); // 異步最後發起請求
複製代碼
// 設置全局日誌級別
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();
}
複製代碼
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();
複製代碼
mica
工具集:gitee.com/596392912/m…pig
宇宙最強微服務(架構師必備):gitee.com/log4j/pigSpringBlade
完整的線上解決方案(企業開發必備):gitee.com/smallc/Spri…掃描上面二維碼,更多精彩內容天天推薦!java