mica-http 徹底使用指南【一】

mica-http

mica-http 是 okhttp 的封裝,Fluent 語法的 http 工具包,語法參考 HttpClient Fluent API。html

使用

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, 默認:NONEjson


HttpRequest.setGlobalLog(LogLevel.BODY);


api

同步請求 url,方法支持 get、post、patch、put、deletecookie


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

async

同步maven


String text = HttpRequest.patch("https://www.baidu.com")  .execute()  .onSuccess(ResponseSpec::asString);// onSuccess http code in [200..300) 處理響應,有網絡異常等直接返回 null

異步請求ide


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);
// 同步,異常時 返回 nullString 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);
// 同步,成功時消費(處理) responseHttpRequest.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();
相關文章
相關標籤/搜索