From a92765c9aabd89d353fe1089077a463cf5834de0 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=A6=82=E6=A2=A6=E6=8A=80=E6=9C=AF?= <596392912@qq.com>
Date: Mon, 17 Jun 2019 13:53:12 +0800
Subject: [PATCH] =?UTF-8?q?:wrench:=20mica-okhttp=20=E8=B0=83=E6=95=B4?=
=?UTF-8?q?=E4=B8=BA=20mica-http.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
README.md | 4 +-
mica-bom/README.md | 2 +-
mica-bom/build.gradle | 2 +-
{mica-okhttp => mica-http}/README.md | 10 +-
{mica-okhttp => mica-http}/build.gradle | 0
.../net/dreamlu/http/BaseAuthenticator.java | 42 +++++++
.../java/net/dreamlu/http/FormBuilder.java | 14 +--
.../java/net/dreamlu/http/HttpRequest.java | 113 ++++++++++--------
.../java/net/dreamlu/http/HttpResponse.java | 4 +-
.../main/java/net/dreamlu/http/Method.java | 2 +-
.../dreamlu/http/MultipartFormBuilder.java | 26 ++--
.../java/net/dreamlu/http/Slf4jLogger.java | 0
.../java/net/dreamlu/HttpRequestDemo.java | 14 +--
settings.gradle | 2 +-
14 files changed, 146 insertions(+), 89 deletions(-)
rename {mica-okhttp => mica-http}/README.md (65%)
rename {mica-okhttp => mica-http}/build.gradle (100%)
create mode 100644 mica-http/src/main/java/net/dreamlu/http/BaseAuthenticator.java
rename mica-okhttp/src/main/java/net/dreamlu/http/XFormBuilder.java => mica-http/src/main/java/net/dreamlu/http/FormBuilder.java (80%)
rename mica-okhttp/src/main/java/net/dreamlu/http/XRequest.java => mica-http/src/main/java/net/dreamlu/http/HttpRequest.java (64%)
rename mica-okhttp/src/main/java/net/dreamlu/http/XResponse.java => mica-http/src/main/java/net/dreamlu/http/HttpResponse.java (97%)
rename mica-okhttp/src/main/java/net/dreamlu/http/XMethod.java => mica-http/src/main/java/net/dreamlu/http/Method.java (96%)
rename mica-okhttp/src/main/java/net/dreamlu/http/XFormPartBuilder.java => mica-http/src/main/java/net/dreamlu/http/MultipartFormBuilder.java (68%)
rename {mica-okhttp => mica-http}/src/main/java/net/dreamlu/http/Slf4jLogger.java (100%)
rename mica-okhttp/src/test/java/net/dreamlu/XRequests.java => mica-http/src/test/java/net/dreamlu/HttpRequestDemo.java (83%)
diff --git a/README.md b/README.md
index c0605202..94d3ef2f 100644
--- a/README.md
+++ b/README.md
@@ -32,8 +32,8 @@
- Jaskson Read Write HttpMessageConverter,分读写的消息转换器。
- Spring 枚举转换器,规则同 Jackson。
-### mica-okhttp
-- `okhttp` 的简单 http 工具包,语法参考 HttpClient Fluent API
+### mica-http
+- `mica-http` 是 `okhttp` 的封装,Fluent 语法的 http 工具包,语法参考 HttpClient Fluent API。
### mica-launcher
- 项目启动器
diff --git a/mica-bom/README.md b/mica-bom/README.md
index 2b59608c..9c7d2714 100644
--- a/mica-bom/README.md
+++ b/mica-bom/README.md
@@ -36,7 +36,7 @@ net.dreamlu
`artifactId`:
```text
mica-core
-mica-okhttp
+mica-http
mica-launcher
mica-log4j2
mica-boot
diff --git a/mica-bom/build.gradle b/mica-bom/build.gradle
index 8b8e687c..22887552 100644
--- a/mica-bom/build.gradle
+++ b/mica-bom/build.gradle
@@ -16,7 +16,7 @@ dependencyManagement {
// mica
dependency "net.dreamlu:mica-auto:${micaAutoVersion}"
dependency "net.dreamlu:mica-core:${VERSION}"
- dependency "net.dreamlu:mica-okhttp:${VERSION}"
+ dependency "net.dreamlu:mica-http:${VERSION}"
dependency "net.dreamlu:mica-launcher:${VERSION}"
dependency "net.dreamlu:mica-log4j2:${VERSION}"
dependency "net.dreamlu:mica-boot:${VERSION}"
diff --git a/mica-okhttp/README.md b/mica-http/README.md
similarity index 65%
rename from mica-okhttp/README.md
rename to mica-http/README.md
index 95c735e0..bcb841cd 100644
--- a/mica-okhttp/README.md
+++ b/mica-http/README.md
@@ -1,25 +1,25 @@
# mica-okhttp
-`mica-okhttp` 是基于 `okhttp` 的简单 http 工具包,语法参考 HttpClient Fluent API(fluent-hc)。
+`mica-http` 是 `okhttp` 的封装,Fluent 语法的 http 工具包,语法参考 HttpClient Fluent API。
## 使用
### maven
```xml
+ * Licensed under the GNU LESSER GENERAL PUBLIC LICENSE 3.0; + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + *
+ * http://www.gnu.org/licenses/lgpl.html + *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package net.dreamlu.http;
+
+import lombok.RequiredArgsConstructor;
+import okhttp3.*;
+
+import java.io.IOException;
+import java.nio.charset.StandardCharsets;
+
+/**
+ * BaseAuth
+ *
+ * @author L.cm
+ */
+@RequiredArgsConstructor
+public class BaseAuthenticator implements Authenticator {
+ private final String userName;
+ private final String password;
+
+ @Override
+ public Request authenticate(Route route, Response response) throws IOException {
+ String credential = Credentials.basic(userName, password, StandardCharsets.UTF_8);
+ return response.request().newBuilder()
+ .header("Authorization", credential)
+ .build();
+ }
+}
diff --git a/mica-okhttp/src/main/java/net/dreamlu/http/XFormBuilder.java b/mica-http/src/main/java/net/dreamlu/http/FormBuilder.java
similarity index 80%
rename from mica-okhttp/src/main/java/net/dreamlu/http/XFormBuilder.java
rename to mica-http/src/main/java/net/dreamlu/http/FormBuilder.java
index 2858f1bc..00adfe2b 100644
--- a/mica-okhttp/src/main/java/net/dreamlu/http/XFormBuilder.java
+++ b/mica-http/src/main/java/net/dreamlu/http/FormBuilder.java
@@ -23,32 +23,32 @@ import okhttp3.FormBody;
*
* @author L.cm
*/
-public class XFormBuilder {
- private final XRequest request;
+public class FormBuilder {
+ private final HttpRequest request;
private final FormBody.Builder formBuilder;
- XFormBuilder(XRequest request) {
+ FormBuilder(HttpRequest request) {
this.request = request;
this.formBuilder = new FormBody.Builder();
}
- public XFormBuilder add(String name, String value) {
+ public FormBuilder add(String name, String value) {
this.formBuilder.add(name, value);
return this;
}
- public XFormBuilder addEncoded(String name, String value) {
+ public FormBuilder addEncoded(String name, String value) {
this.formBuilder.addEncoded(name, value);
return this;
}
- public XRequest build() {
+ public HttpRequest build() {
FormBody formBody = formBuilder.build();
this.request.form(formBody);
return this.request;
}
- public XResponse execute() {
+ public HttpResponse execute() {
return this.build().execute();
}
}
diff --git a/mica-okhttp/src/main/java/net/dreamlu/http/XRequest.java b/mica-http/src/main/java/net/dreamlu/http/HttpRequest.java
similarity index 64%
rename from mica-okhttp/src/main/java/net/dreamlu/http/XRequest.java
rename to mica-http/src/main/java/net/dreamlu/http/HttpRequest.java
index e09b97ed..029fc7ba 100644
--- a/mica-okhttp/src/main/java/net/dreamlu/http/XRequest.java
+++ b/mica-http/src/main/java/net/dreamlu/http/HttpRequest.java
@@ -27,6 +27,7 @@ import java.net.InetSocketAddress;
import java.net.Proxy;
import java.net.URI;
import java.time.Duration;
+import java.util.Map;
import java.util.concurrent.TimeUnit;
/**
@@ -34,7 +35,7 @@ import java.util.concurrent.TimeUnit;
*
* @author L.cm
*/
-public class XRequest {
+public class HttpRequest {
private static final String DEFAULT_USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36";
private static OkHttpClient httpClient = new OkHttpClient();
private final Request.Builder requestBuilder;
@@ -45,103 +46,104 @@ public class XRequest {
private Boolean followRedirects;
private HttpLoggingInterceptor.Level level;
private Interceptor interceptor;
+ private Authenticator authenticator;
private Duration connectTimeout;
private Duration readTimeout;
private Duration writeTimeout;
private Proxy proxy;
- public static XRequest get(final String url) {
+ public static HttpRequest get(final String url) {
UriComponentsBuilder uriBuilder = UriComponentsBuilder.fromUriString(url);
- return new XRequest(new Request.Builder(), uriBuilder, XMethod.GET);
+ return new HttpRequest(new Request.Builder(), uriBuilder, Method.GET);
}
- public static XRequest get(final URI uri) {
+ public static HttpRequest get(final URI uri) {
UriComponentsBuilder uriBuilder = UriComponentsBuilder.fromUri(uri);
- return new XRequest(new Request.Builder(), uriBuilder, XMethod.GET);
+ return new HttpRequest(new Request.Builder(), uriBuilder, Method.GET);
}
- public static XRequest post(final String url) {
+ public static HttpRequest post(final String url) {
UriComponentsBuilder uriBuilder = UriComponentsBuilder.fromUriString(url);
- return new XRequest(new Request.Builder(), uriBuilder, XMethod.POST);
+ return new HttpRequest(new Request.Builder(), uriBuilder, Method.POST);
}
- public static XRequest post(final URI uri) {
+ public static HttpRequest post(final URI uri) {
UriComponentsBuilder uriBuilder = UriComponentsBuilder.fromUri(uri);
- return new XRequest(new Request.Builder(), uriBuilder, XMethod.POST);
+ return new HttpRequest(new Request.Builder(), uriBuilder, Method.POST);
}
- public static XRequest patch(final String url) {
+ public static HttpRequest patch(final String url) {
UriComponentsBuilder uriBuilder = UriComponentsBuilder.fromUriString(url);
- return new XRequest(new Request.Builder(), uriBuilder, XMethod.PATCH);
+ return new HttpRequest(new Request.Builder(), uriBuilder, Method.PATCH);
}
- public static XRequest patch(final URI uri) {
+ public static HttpRequest patch(final URI uri) {
UriComponentsBuilder uriBuilder = UriComponentsBuilder.fromUri(uri);
- return new XRequest(new Request.Builder(), uriBuilder, XMethod.PATCH);
+ return new HttpRequest(new Request.Builder(), uriBuilder, Method.PATCH);
}
- public static XRequest put(final String url) {
+ public static HttpRequest put(final String url) {
UriComponentsBuilder uriBuilder = UriComponentsBuilder.fromUriString(url);
- return new XRequest(new Request.Builder(), uriBuilder, XMethod.PUT);
+ return new HttpRequest(new Request.Builder(), uriBuilder, Method.PUT);
}
- public static XRequest put(final URI uri) {
+ public static HttpRequest put(final URI uri) {
UriComponentsBuilder uriBuilder = UriComponentsBuilder.fromUri(uri);
- return new XRequest(new Request.Builder(), uriBuilder, XMethod.PUT);
+ return new HttpRequest(new Request.Builder(), uriBuilder, Method.PUT);
}
- public static XRequest delete(final String url) {
+ public static HttpRequest delete(final String url) {
UriComponentsBuilder uriBuilder = UriComponentsBuilder.fromUriString(url);
- return new XRequest(new Request.Builder(), uriBuilder, XMethod.DELETE);
+ return new HttpRequest(new Request.Builder(), uriBuilder, Method.DELETE);
}
- public static XRequest delete(final URI uri) {
+ public static HttpRequest delete(final URI uri) {
UriComponentsBuilder uriBuilder = UriComponentsBuilder.fromUri(uri);
- return new XRequest(new Request.Builder(), uriBuilder, XMethod.DELETE);
+ return new HttpRequest(new Request.Builder(), uriBuilder, Method.DELETE);
}
private static RequestBody emptyBody() {
return RequestBody.create(null, new byte[0]);
}
- public XRequest query(String name, Object... values) {
+ public HttpRequest query(String name, Object... values) {
this.uriBuilder.queryParam(name, values);
return this;
}
- XRequest form(FormBody formBody) {
+ HttpRequest form(FormBody formBody) {
this.requestBody = formBody;
return this;
}
- XRequest formPart(MultipartBody multipartBody) {
+ HttpRequest multipartForm(MultipartBody multipartBody) {
this.requestBody = multipartBody;
return this;
}
- public XFormBuilder formBuilder() {
- return new XFormBuilder(this);
+ public FormBuilder formBuilder() {
+ return new FormBuilder(this);
}
- public XFormPartBuilder formPartBuilder() {
- return new XFormPartBuilder(this);
+ public MultipartFormBuilder multipartFormBuilder() {
+ return new MultipartFormBuilder(this);
}
- public XRequest body(RequestBody requestBody) {
+ public HttpRequest body(RequestBody requestBody) {
this.requestBody = requestBody;
return this;
}
- public XRequest bodyString(String body) {
+ public HttpRequest bodyString(String body) {
this.requestBody = RequestBody.create(null, body);
return this;
}
- public XRequest bodyJson(Object body) {
+ public HttpRequest bodyJson(Object body) {
return bodyString(JsonUtil.toJson(body));
}
- private XRequest(final Request.Builder requestBuilder, UriComponentsBuilder uriBuilder, String httpMethod) {
+ private HttpRequest(final Request.Builder requestBuilder, UriComponentsBuilder uriBuilder, String httpMethod) {
this.requestBuilder = requestBuilder;
this.uriBuilder = uriBuilder;
this.httpMethod = httpMethod;
@@ -167,6 +169,9 @@ public class XRequest {
loggingInterceptor.setLevel(level);
builder.addInterceptor(loggingInterceptor);
}
+ if (this.authenticator != null) {
+ builder.authenticator(authenticator);
+ }
if (this.interceptor != null) {
builder.addInterceptor(this.interceptor);
}
@@ -187,83 +192,93 @@ public class XRequest {
return builder.build().newCall(request).execute();
}
- public XResponse execute() {
+ public HttpResponse execute() {
try {
- return new XResponse(internalExecute(httpClient));
+ return new HttpResponse(internalExecute(httpClient));
} catch (IOException e) {
throw new RuntimeException(e);
}
}
+ public HttpRequest baseAuth(String userName, String password) {
+ this.authenticator = new BaseAuthenticator(userName, password);
+ return this;
+ }
+
//// HTTP header operations
- public XRequest addHeader(final String... namesAndValues) {
+ public HttpRequest addHeader(final Map