mirror of
https://gitee.com/dromara/hutool.git
synced 2025-04-24 18:04:54 +08:00
add gzip support for okhttp
This commit is contained in:
parent
5aed18a51b
commit
b72bbd85e7
@ -14,6 +14,7 @@ package org.dromara.hutool.http;
|
||||
|
||||
import org.dromara.hutool.core.compress.InflaterInputStream;
|
||||
import org.dromara.hutool.core.map.CaseInsensitiveMap;
|
||||
import org.dromara.hutool.core.reflect.ConstructorUtil;
|
||||
|
||||
import java.io.InputStream;
|
||||
import java.util.Map;
|
||||
@ -45,6 +46,26 @@ public enum GlobalCompressStreamRegister {
|
||||
compressMap.put("deflate", InflaterInputStream.class);
|
||||
}
|
||||
|
||||
/**
|
||||
* 包装原始响应流为指定压缩算法解压流
|
||||
*
|
||||
* @param in 原始响应流
|
||||
* @param contentEncoding 压缩编码,如gzip等
|
||||
* @return 包装后的响应流
|
||||
*/
|
||||
public InputStream wrapStream(final InputStream in, final String contentEncoding){
|
||||
final Class<? extends InputStream> streamClass = get(contentEncoding);
|
||||
if (null != streamClass) {
|
||||
try {
|
||||
return ConstructorUtil.newInstance(streamClass, in);
|
||||
} catch (final Exception ignore) {
|
||||
// 对于构造错误的压缩算法,跳过之
|
||||
}
|
||||
}
|
||||
|
||||
return in;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取解压器
|
||||
*
|
||||
|
@ -12,7 +12,6 @@
|
||||
|
||||
package org.dromara.hutool.http.client.engine.jdk;
|
||||
|
||||
import org.dromara.hutool.core.reflect.ConstructorUtil;
|
||||
import org.dromara.hutool.core.text.StrUtil;
|
||||
import org.dromara.hutool.http.GlobalCompressStreamRegister;
|
||||
import org.dromara.hutool.http.HttpException;
|
||||
@ -106,14 +105,6 @@ public class JdkHttpInputStream extends InputStream {
|
||||
return;
|
||||
}
|
||||
|
||||
final String contentEncoding = response.contentEncoding();
|
||||
final Class<? extends InputStream> streamClass = GlobalCompressStreamRegister.INSTANCE.get(contentEncoding);
|
||||
if (null != streamClass) {
|
||||
try {
|
||||
this.in = ConstructorUtil.newInstance(streamClass, this.in);
|
||||
} catch (final Exception ignore) {
|
||||
// 对于构造错误的压缩算法,跳过之
|
||||
}
|
||||
}
|
||||
this.in = GlobalCompressStreamRegister.INSTANCE.wrapStream(this.in, response.contentEncoding());
|
||||
}
|
||||
}
|
||||
|
@ -40,9 +40,7 @@ public class OkHttpEngine implements ClientEngine {
|
||||
/**
|
||||
* 构造
|
||||
*/
|
||||
public OkHttpEngine() {
|
||||
this.client = new OkHttpClient();
|
||||
}
|
||||
public OkHttpEngine() {}
|
||||
|
||||
@Override
|
||||
public OkHttpEngine init(final ClientConfig config) {
|
||||
|
@ -12,12 +12,14 @@
|
||||
|
||||
package org.dromara.hutool.http.client.engine.okhttp;
|
||||
|
||||
import org.dromara.hutool.core.io.stream.EmptyInputStream;
|
||||
import org.dromara.hutool.core.util.ObjUtil;
|
||||
import org.dromara.hutool.http.client.Response;
|
||||
import kotlin.Pair;
|
||||
import okhttp3.Headers;
|
||||
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.client.Response;
|
||||
import org.dromara.hutool.http.meta.HeaderName;
|
||||
|
||||
import java.io.InputStream;
|
||||
import java.nio.charset.Charset;
|
||||
@ -77,7 +79,9 @@ public class OkHttpResponse implements Response {
|
||||
if(null == body){
|
||||
return EmptyInputStream.INSTANCE;
|
||||
}
|
||||
return body.byteStream();
|
||||
|
||||
return GlobalCompressStreamRegister.INSTANCE.wrapStream(body.byteStream(),
|
||||
this.rawRes.header(HeaderName.CONTENT_ENCODING.getValue()));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -13,37 +13,40 @@
|
||||
package org.dromara.hutool.http.client;
|
||||
|
||||
import org.dromara.hutool.core.lang.Console;
|
||||
import org.dromara.hutool.http.client.engine.httpclient5.HttpClient5Engine;
|
||||
import org.dromara.hutool.http.client.engine.okhttp.OkHttpEngine;
|
||||
import org.dromara.hutool.http.meta.HeaderName;
|
||||
import org.dromara.hutool.http.meta.Method;
|
||||
import org.dromara.hutool.json.JSONUtil;
|
||||
import org.junit.jupiter.api.Disabled;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
|
||||
public class XiaohonshuTest {
|
||||
@Test
|
||||
@Disabled
|
||||
void postTest() {
|
||||
long l = (new Date().getTime());
|
||||
String sign = "oauth.getAccessToken?appId=880c43b57a97425d9a06×tamp="+l
|
||||
+"&version=2.0d9758815286df7a3075d64785df2b890";
|
||||
final long l = System.currentTimeMillis();
|
||||
final String sign = "oauth.getAccessToken?appId=880c43b57a97425d9a06×tamp=" + l
|
||||
+ "&version=2.0d9758815286df7a3075d64785df2b890";
|
||||
|
||||
HashMap<String, Object> paramMap = new HashMap<>();
|
||||
paramMap.put("sign",sign);
|
||||
final HashMap<String, Object> paramMap = new HashMap<>();
|
||||
paramMap.put("sign", sign);
|
||||
paramMap.put("appId", "880c43b57a97425d9a06"); //880c43b57a97425d9a06
|
||||
paramMap.put("timestamp", l);
|
||||
paramMap.put("version", "2.0");
|
||||
paramMap.put("method", "oauth.getAccessToken");
|
||||
paramMap.put("code", "code-266ef7f29fff4f0d80d4bd23f579391e-2097e077fad84eb0a5ec4a44a8de1116");
|
||||
String json = JSONUtil.toJsonStr(paramMap);
|
||||
final String json = JSONUtil.toJsonStr(paramMap);
|
||||
|
||||
Request request = Request.of("https://ark.xiaohongshu.com/ark/open_api/v3/common_controller")
|
||||
.header(HeaderName.CONTENT_TYPE, "application/json;charset=UTF-8")
|
||||
final Request request = Request.of("https://ark.xiaohongshu.com/ark/open_api/v3/common_controller")
|
||||
.header(HeaderName.CONTENT_TYPE, "application/json;charset=UTF-8")
|
||||
.method(Method.POST)
|
||||
.header(HeaderName.ACCEPT_ENCODING, "gzip")
|
||||
.body(json);
|
||||
Console.log(request.send(new HttpClient5Engine()).bodyStr());
|
||||
|
||||
final Response res = request.send(new OkHttpEngine());
|
||||
Console.log(res.header(HeaderName.CONTENT_ENCODING));
|
||||
Console.log(res.bodyStr());
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user