diff --git a/hutool-http/src/main/java/org/dromara/hutool/http/HttpUtil.java b/hutool-http/src/main/java/org/dromara/hutool/http/HttpUtil.java index 781f2d8d6..e73d6f89f 100644 --- a/hutool-http/src/main/java/org/dromara/hutool/http/HttpUtil.java +++ b/hutool-http/src/main/java/org/dromara/hutool/http/HttpUtil.java @@ -23,6 +23,7 @@ import org.dromara.hutool.http.meta.Method; import org.dromara.hutool.http.server.SimpleServer; import java.nio.charset.Charset; +import java.util.List; import java.util.Map; /** @@ -234,4 +235,23 @@ public class HttpUtil { public static SimpleServer createServer(final int port) { return new SimpleServer(port); } + + /** + * 打印{@link Response} 为可读形式 + * @param response {@link Response} + * @return 字符串 + */ + public static String toString(final Response response) { + final StringBuilder sb = StrUtil.builder(); + sb.append("Response Status: ").append(response.getStatus()).append(StrUtil.CRLF); + sb.append("Response Headers: ").append(StrUtil.CRLF); + for (final Map.Entry> entry : response.headers().entrySet()) { + sb.append(" ").append(entry).append(StrUtil.CRLF); + } + + sb.append("Response Body: ").append(StrUtil.CRLF); + sb.append(" ").append(response.bodyStr()).append(StrUtil.CRLF); + + return sb.toString(); + } } diff --git a/hutool-http/src/main/java/org/dromara/hutool/http/client/engine/httpclient4/HttpClient4Response.java b/hutool-http/src/main/java/org/dromara/hutool/http/client/engine/httpclient4/HttpClient4Response.java index 7fcb9dd09..5c8afd961 100644 --- a/hutool-http/src/main/java/org/dromara/hutool/http/client/engine/httpclient4/HttpClient4Response.java +++ b/hutool-http/src/main/java/org/dromara/hutool/http/client/engine/httpclient4/HttpClient4Response.java @@ -16,6 +16,7 @@ import org.dromara.hutool.core.io.IORuntimeException; import org.dromara.hutool.core.array.ArrayUtil; import org.dromara.hutool.core.util.ObjUtil; import org.dromara.hutool.http.HttpException; +import org.dromara.hutool.http.HttpUtil; import org.dromara.hutool.http.client.Response; import org.apache.http.Header; import org.apache.http.ParseException; @@ -121,4 +122,10 @@ public class HttpClient4Response implements Response { public void close() throws IOException { rawRes.close(); } + + @Override + public String toString() { + return HttpUtil.toString(this); + } + } diff --git a/hutool-http/src/main/java/org/dromara/hutool/http/client/engine/httpclient5/HttpClient5Response.java b/hutool-http/src/main/java/org/dromara/hutool/http/client/engine/httpclient5/HttpClient5Response.java index 67fee5c36..19365f621 100644 --- a/hutool-http/src/main/java/org/dromara/hutool/http/client/engine/httpclient5/HttpClient5Response.java +++ b/hutool-http/src/main/java/org/dromara/hutool/http/client/engine/httpclient5/HttpClient5Response.java @@ -16,6 +16,7 @@ import org.dromara.hutool.core.io.IORuntimeException; import org.dromara.hutool.core.array.ArrayUtil; import org.dromara.hutool.core.util.ObjUtil; import org.dromara.hutool.http.HttpException; +import org.dromara.hutool.http.HttpUtil; import org.dromara.hutool.http.client.Response; import org.apache.hc.client5.http.impl.classic.CloseableHttpResponse; import org.apache.hc.core5.http.ClassicHttpResponse; @@ -122,4 +123,9 @@ public class HttpClient5Response implements Response { public void close() throws IOException { rawRes.close(); } + + @Override + public String toString() { + return HttpUtil.toString(this); + } } diff --git a/hutool-http/src/main/java/org/dromara/hutool/http/client/engine/jdk/JdkHttpResponse.java b/hutool-http/src/main/java/org/dromara/hutool/http/client/engine/jdk/JdkHttpResponse.java index c48a0c9bd..74457a4d1 100644 --- a/hutool-http/src/main/java/org/dromara/hutool/http/client/engine/jdk/JdkHttpResponse.java +++ b/hutool-http/src/main/java/org/dromara/hutool/http/client/engine/jdk/JdkHttpResponse.java @@ -18,6 +18,7 @@ import org.dromara.hutool.core.text.StrUtil; import org.dromara.hutool.core.array.ArrayUtil; import org.dromara.hutool.core.util.ObjUtil; import org.dromara.hutool.http.HttpException; +import org.dromara.hutool.http.HttpUtil; import org.dromara.hutool.http.client.Response; import org.dromara.hutool.http.client.body.ResponseBody; import org.dromara.hutool.http.client.cookie.GlobalCookieManager; @@ -222,16 +223,7 @@ public class JdkHttpResponse implements Response, Closeable { @Override public String toString() { - final StringBuilder sb = StrUtil.builder(); - sb.append("Response Headers: ").append(StrUtil.CRLF); - for (final Entry> entry : this.headers.entrySet()) { - sb.append(" ").append(entry).append(StrUtil.CRLF); - } - - sb.append("Response Body: ").append(StrUtil.CRLF); - sb.append(" ").append(this.bodyStr()).append(StrUtil.CRLF); - - return sb.toString(); + return HttpUtil.toString(this); } // ---------------------------------------------------------------- Private method start diff --git a/hutool-http/src/main/java/org/dromara/hutool/http/client/engine/okhttp/OkHttpResponse.java b/hutool-http/src/main/java/org/dromara/hutool/http/client/engine/okhttp/OkHttpResponse.java index cea448382..0ad89331c 100644 --- a/hutool-http/src/main/java/org/dromara/hutool/http/client/engine/okhttp/OkHttpResponse.java +++ b/hutool-http/src/main/java/org/dromara/hutool/http/client/engine/okhttp/OkHttpResponse.java @@ -18,6 +18,7 @@ import okhttp3.ResponseBody; import org.dromara.hutool.core.io.stream.EmptyInputStream; import org.dromara.hutool.core.util.ObjUtil; import org.dromara.hutool.http.GlobalCompressStreamRegister; +import org.dromara.hutool.http.HttpUtil; import org.dromara.hutool.http.client.Response; import org.dromara.hutool.http.meta.HeaderName; @@ -90,4 +91,9 @@ public class OkHttpResponse implements Response { rawRes.close(); } } + + @Override + public String toString() { + return HttpUtil.toString(this); + } } diff --git a/hutool-http/src/test/java/org/dromara/hutool/http/client/HttpClientSendTest.java b/hutool-http/src/test/java/org/dromara/hutool/http/client/HttpClientSendTest.java new file mode 100644 index 000000000..815c43b21 --- /dev/null +++ b/hutool-http/src/test/java/org/dromara/hutool/http/client/HttpClientSendTest.java @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2023. looly(loolly@aliyun.com) + * Hutool is licensed under Mulan PSL v2. + * You can use this software according to the terms and conditions of the Mulan PSL v2. + * You may obtain a copy of Mulan PSL v2 at: + * https://license.coscl.org.cn/MulanPSL2 + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, + * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, + * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. + * See the Mulan PSL v2 for more details. + */ + +package org.dromara.hutool.http.client; + +import org.dromara.hutool.core.lang.Console; +import org.dromara.hutool.http.client.engine.jdk.JdkClientEngine; +import org.dromara.hutool.http.client.engine.okhttp.OkHttpEngine; +import org.dromara.hutool.http.meta.Method; +import org.dromara.hutool.json.JSONUtil; +import org.junit.jupiter.api.Test; + +public class HttpClientSendTest { + @Test + void sendTest() { + final String json = JSONUtil.ofObj() + .set("contract_id", "1387572813382368") + .set("txt_url", "http://47.99.192.138:9000/oss/20230915/test.txt") + .set("docx_url", "http://47.99.192.138:9000/oss/20230915/test.docx") + .toString(); + + final Response response = + Request.of("http://47.99.192.138:8012/extract/counterparty/") + .method(Method.POST) + .auth( + "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJsb2dpbklkIjoidGVzdGxvZ2luMSIsImV4cCI6MTU1NjcxMjAzNn0.1ukpIm0xAqXFAvHk7U8eFJbhpiYTV8VtdaiBl_JqQ0s") + .body(json) + .send(new OkHttpEngine()); + + Console.log(response); + } +}