提交 a92765c9 编写于 作者: 如梦技术's avatar 如梦技术 🐛

🔧 mica-okhttp 调整为 mica-http.

上级 bd49eb04
......@@ -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
- 项目启动器
......
......@@ -36,7 +36,7 @@ net.dreamlu
`artifactId`
```text
mica-core
mica-okhttp
mica-http
mica-launcher
mica-log4j2
mica-boot
......
......@@ -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}"
......
# mica-okhttp
`mica-okhttp` 是基于 `okhttp` 的简单 http 工具包,语法参考 HttpClient Fluent API(fluent-hc)
`mica-http``okhttp` 的封装,Fluent 语法的 http 工具包,语法参考 HttpClient Fluent API
## 使用
### maven
```xml
<dependency>
<groupId>net.dreamlu</groupId>
<artifactId>mica-okhttp</artifactId>
<artifactId>mica-http</artifactId>
<version>${version}</version>
</dependency>
```
### gradle
```groovy
compile("net.dreamlu:mica-okhttp:${version}")
compile("net.dreamlu:mica-http:${version}")
```
### 示例代码
```java
private String getUserEmail(String accessToken) {
return XRequest.get("https://api.linkedin.com/v2/emailAddress?q=members&projection=(elements*(handle~))")
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)
......@@ -31,7 +31,7 @@ private String getUserEmail(String accessToken) {
}
public static void test() {
XRequest.post("https://www.baidu.com/do-stuff")
HttpRequest.post("https://www.baidu.com/do-stuff")
.log(HttpLoggingInterceptor.Level.BASIC)
.formBuilder()
.add("a", "b")
......
/*
* Copyright (c) 2019-2029, Dreamlu (596392912@qq.com & www.dreamlu.net).
* <p>
* 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
* <p>
* http://www.gnu.org/licenses/lgpl.html
* <p>
* 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();
}
}
......@@ -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();
}
}
......@@ -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<String, String> headers) {
this.requestBuilder.headers(Headers.of(headers));
return this;
}
public HttpRequest addHeader(final String... namesAndValues) {
Headers headers = Headers.of(namesAndValues);
this.requestBuilder.headers(headers);
return this;
}
public XRequest addHeader(final String name, final String value) {
public HttpRequest addHeader(final String name, final String value) {
this.requestBuilder.addHeader(name, value);
return this;
}
public XRequest setHeader(final String name, final String value) {
public HttpRequest setHeader(final String name, final String value) {
this.requestBuilder.header(name, value);
return this;
}
public XRequest removeHeader(final String name) {
public HttpRequest removeHeader(final String name) {
this.requestBuilder.removeHeader(name);
return this;
}
public XRequest cacheControl(final CacheControl cacheControl) {
public HttpRequest cacheControl(final CacheControl cacheControl) {
this.requestBuilder.cacheControl(cacheControl);
return this;
}
public XRequest userAgent(final String userAgent) {
public HttpRequest userAgent(final String userAgent) {
this.userAgent = userAgent;
return this;
}
public XRequest followRedirects(boolean followRedirects) {
public HttpRequest followRedirects(boolean followRedirects) {
this.followRedirects = followRedirects;
return this;
}
public XRequest log() {
public HttpRequest log() {
this.level = HttpLoggingInterceptor.Level.BODY;
return this;
}
public XRequest log(HttpLoggingInterceptor.Level level) {
public HttpRequest log(HttpLoggingInterceptor.Level level) {
this.level = level;
return this;
}
public XRequest interceptor(Interceptor interceptor) {
public HttpRequest interceptor(Interceptor interceptor) {
this.interceptor = interceptor;
return this;
}
//// HTTP connection parameter operations
public XRequest connectTimeout(final Duration timeout) {
public HttpRequest connectTimeout(final Duration timeout) {
this.connectTimeout = timeout;
return this;
}
public XRequest readTimeout(Duration readTimeout) {
public HttpRequest readTimeout(Duration readTimeout) {
this.readTimeout = readTimeout;
return this;
}
public XRequest writeTimeout(Duration writeTimeout) {
public HttpRequest writeTimeout(Duration writeTimeout) {
this.writeTimeout = writeTimeout;
return this;
}
public XRequest viaProxy(final InetSocketAddress address) {
public HttpRequest viaProxy(final InetSocketAddress address) {
this.proxy = new Proxy(Proxy.Type.HTTP, address);
return this;
}
......@@ -274,6 +289,6 @@ public class XRequest {
}
public static void setHttpClient(OkHttpClient httpClient) {
XRequest.httpClient = httpClient;
HttpRequest.httpClient = httpClient;
}
}
......@@ -37,11 +37,11 @@ import java.util.Map;
*
* @author L.cm
*/
public class XResponse {
public class HttpResponse {
private final Response response;
private final ResponseBody body;
XResponse(final Response response) {
HttpResponse(final Response response) {
this.response = response;
this.body = response.body();
}
......
......@@ -21,7 +21,7 @@ package net.dreamlu.http;
*
* @author dream.lu
*/
public interface XMethod {
public interface Method {
String GET = "GET";
String POST = "POST";
String PATCH = "PATCH";
......
......@@ -26,58 +26,58 @@ import java.io.File;
*
* @author L.cm
*/
public class XFormPartBuilder {
private final XRequest request;
public class MultipartFormBuilder {
private final HttpRequest request;
private final MultipartBody.Builder formBuilder;
XFormPartBuilder(XRequest request) {
MultipartFormBuilder(HttpRequest request) {
this.request = request;
this.formBuilder = new MultipartBody.Builder();
}
public XFormPartBuilder add(String name, String value) {
public MultipartFormBuilder add(String name, String value) {
this.formBuilder.addFormDataPart(name, value);
return this;
}
public XFormPartBuilder add(String name, File file) {
public MultipartFormBuilder add(String name, File file) {
String fileName = file.getName();
return add(name, fileName, file);
}
public XFormPartBuilder add(String name, @Nullable String filename, File file) {
public MultipartFormBuilder add(String name, @Nullable String filename, File file) {
RequestBody fileBody = RequestBody.create(null, file);
return add(name, filename, fileBody);
}
public XFormPartBuilder add(String name, @Nullable String filename, RequestBody fileBody) {
public MultipartFormBuilder add(String name, @Nullable String filename, RequestBody fileBody) {
this.formBuilder.addFormDataPart(name, filename, fileBody);
return this;
}
public XFormPartBuilder add(RequestBody body) {
public MultipartFormBuilder add(RequestBody body) {
this.formBuilder.addPart(body);
return this;
}
public XFormPartBuilder add(@Nullable Headers headers, RequestBody body) {
public MultipartFormBuilder add(@Nullable Headers headers, RequestBody body) {
this.formBuilder.addPart(headers, body);
return this;
}
public XFormPartBuilder add(MultipartBody.Part part) {
public MultipartFormBuilder add(MultipartBody.Part part) {
this.formBuilder.addPart(part);
return this;
}
public XRequest build() {
public HttpRequest build() {
formBuilder.setType(MultipartBody.FORM);
MultipartBody formBody = formBuilder.build();
this.request.formPart(formBody);
this.request.multipartForm(formBody);
return this.request;
}
public XResponse execute() {
public HttpResponse execute() {
return this.build().execute();
}
}
......@@ -17,19 +17,19 @@
package net.dreamlu;
import okhttp3.logging.HttpLoggingInterceptor;
import net.dreamlu.http.XRequest;
import net.dreamlu.http.XResponse;
import net.dreamlu.http.HttpRequest;
import net.dreamlu.http.HttpResponse;
import java.time.Duration;
/**
* This example of mica http
*/
public class XRequests {
public class HttpRequestDemo {
public static void main(String[] args) {
// Execute a GET with timeout settings and return response content as String.
XRequest.get("https://www.baidu.com/")
HttpRequest.get("https://www.baidu.com/")
.connectTimeout(Duration.ofSeconds(1000))
.log()
.query("test", "a", "b", "c")
......@@ -40,7 +40,7 @@ public class XRequests {
// Execute a POST with the 'expect-continue' handshake, using HTTP/1.1,
// containing a request body as String and return response content as byte array.
XRequest.post("https://www.baidu.com/do-stuff")
HttpRequest.post("https://www.baidu.com/do-stuff")
.log(HttpLoggingInterceptor.Level.BASIC)
.bodyString("Important stuff")
.formBuilder()
......@@ -49,11 +49,11 @@ public class XRequests {
// Execute a POST with a custom header through the proxy containing a request body
// as an HTML form and save the result to the file
XResponse xResponse = XRequest.post("https://www.baidu.com/some-form")
HttpResponse httpResponse = HttpRequest.post("https://www.baidu.com/some-form")
.log(HttpLoggingInterceptor.Level.HEADERS)
.addHeader("X-Custom-header", "stuff")
.execute();
System.out.println(xResponse);
System.out.println(httpResponse);
}
}
rootProject.name = "mica"
include "mica-bom"
include "mica-core"
include "mica-okhttp"
include "mica-http"
include "mica-launcher"
include "mica-log4j2"
include "mica-boot"
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册