mica-http
是对 okhttp
的封装,Fluent 语法的 http 工具包,语法参考 HttpClient Fluent API。
使用
maven
<dependency> <groupId>net.dreamlu</groupId> <artifactId>mica-http</artifactId> <version>${version}</version> </dependency>
|
spring-retry
为可选依赖,用来对 http 结果断言重试,详见使用说明文档。
<dependency> <groupId>org.springframework.retry</groupId> <artifactId>spring-retry</artifactId> <version>${spring-retry.version}</version> </dependency>
|
gradle
compile("net.dreamlu:mica-http:${version}")
|
spring-retry 为可选依赖,用来对 http 结果断言重试。
compile("org.springframework.retry:spring-retry:${springRetryVersion}")
|
基础用法
HttpRequest.setHttpClient(new OkHttpClient.Builder().build());
HttpRequest.setGlobalLog(LogLevel.BODY);
|
HttpRequest.get("https://www.baidu.com") .log(LogLevel.BASIC) .addHeader("x-account-id", "mica001") .addCookie(new Cookie.Builder() .name("sid") .value("mica_user_001") .build() ) .query("q", "mica") .queryEncoded("name", "encodedValue") .formBuilder() .add("id", 123123) .retryOn(responseSpec -> !responseSpec.isOk()) .proxy(InetSocketAddress.createUnresolved("127.0.0.1", 8080)) .execute() .asJsonNode();
String html = HttpRequest.post("https://www.baidu.com") .execute() .onFailed((request, e) -> { e.printStackTrace(); }) .onResponse(ResponseSpec::asString);
Document document = HttpRequest.patch("https://www.baidu.com") .execute() .onSuccess(DomMapper::asDocument);
HttpRequest.delete("https://www.baidu.com") .async() .onFailed((request, e) -> { e.printStackTrace(); }) .onResponse(responseSpec -> { int httpCode = responseSpec.code();
}) .onSuccessful(responseSpec -> { JsonNode jsonNode = responseSpec.asJsonNode(); }) .execute();
|
示例
示例代码1
HttpRequest.setGlobalLog(LogLevel.BODY);
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);
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<String> opt = HttpRequest.post(URI.create("https://www.baidu.com")) .bodyString("Important stuff") .formBuilder() .add("a", "b") .execute() .onSuccessOpt(ResponseSpec::asString);
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();
HttpRequest.get("https://www.baidu.com/some-form") .async() .onSuccessful(System.out::println) .onFailed((request, e) -> { e.printStackTrace(); }) .execute();
|
示例证书配置
InputStream isTrustCa = HttpRequestTest.class.getResourceAsStream("/cert/ca.jks"); InputStream isSelfCert = HttpRequestTest.class.getResourceAsStream("/cert/outgoing.CertwithKey.pkcs12");
KeyStore selfCert = KeyStore.getInstance("pkcs12"); selfCert.load(isSelfCert, "password".toCharArray()); KeyManagerFactory kmf = KeyManagerFactory.getInstance("sunx509"); kmf.init(selfCert, "password".toCharArray()); KeyStore caCert = KeyStore.getInstance("jks"); caCert.load(isTrustCa, "caPassword".toCharArray()); TrustManagerFactory tmf = TrustManagerFactory.getInstance("sunx509"); tmf.init(caCert); SSLContext sc = SSLContext.getInstance("TLS");
TrustManager[] trustManagers = tmf.getTrustManagers(); X509TrustManager trustManager = (X509TrustManager) trustManagers[0]; sc.init(kmf.getKeyManagers(), trustManagers, (SecureRandom) null);
OkHttpClient.Builder builder = new OkHttpClient.Builder() .sslSocketFactory(sc.getSocketFactory(), trustManager) .hostnameVerifier(TrustAllHostNames.INSTANCE); HttpRequest.setHttpClient(builder.build());
HttpRequest.get("https://123.xxx") .useConsoleLog(LogLevel.BODY) .sslSocketFactory(sc.getSocketFactory(), trustManager) .disableSslValidation() .execute() .asString();
|
示例上传流
public static void main(String[] args) { HttpRequest.setGlobalLog(HttpLogger.Console, LogLevel.HEADERS); InputStream inputStream = HttpRequest.get("http://www.baidu.com/img/PCdong_eab05f3d3a8e54ca5a0817f09b39d463.gif") .executeAsyncAndJoin() .asStream(); String html = HttpRequest.post("http://1.w2wz.com/upload.php") .multipartFormBuilder() .add("uploadimg", "test.gif", inputStream) .execute() .asString(); System.out.println(html); }
|
微信 vs 公众号

精彩内容每日推荐!!!