From c4ab638ae340fe05d37fab4280fcbe8c2fe2915e Mon Sep 17 00:00:00 2001 From: FongMi Date: Tue, 13 Dec 2022 20:39:35 +0800 Subject: [PATCH] Update --- .../java/com/hiker/drpy/method/Global.java | 35 ++++++++++++++----- .../main/java/com/hiker/drpy/net/OkHttp.java | 18 ++-------- 2 files changed, 30 insertions(+), 23 deletions(-) diff --git a/drpy/src/main/java/com/hiker/drpy/method/Global.java b/drpy/src/main/java/com/hiker/drpy/method/Global.java index 5c73170e0..e7a4374d6 100644 --- a/drpy/src/main/java/com/hiker/drpy/method/Global.java +++ b/drpy/src/main/java/com/hiker/drpy/method/Global.java @@ -15,11 +15,13 @@ import com.whl.quickjs.wrapper.QuickJSContext; import org.json.JSONObject; -import java.io.IOException; +import java.io.UnsupportedEncodingException; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.net.URL; +import java.util.Iterator; +import okhttp3.Headers; import okhttp3.Response; public class Global { @@ -54,10 +56,11 @@ public class Global { JSObject jsObject = ctx.createNewJSObject(); JSObject jsHeader = ctx.createNewJSObject(); JSONObject obj = new JSONObject(ctx.stringify(object)); - Response response = OkHttp.get().newCall(url, obj).execute(); + Headers headers = getHeader(obj.optJSONObject("headers")); + Response response = OkHttp.get().newCall(url, obj, headers).execute(); for (String name : response.headers().names()) jsHeader.setProperty(name, response.header(name)); jsObject.setProperty("headers", jsHeader); - setReqContent(jsObject, obj, response); + setContent(jsObject, headers, obj.optInt("buffer"), response.body().bytes()); return jsObject; } catch (Throwable e) { return null; @@ -120,20 +123,36 @@ public class Global { } } - private void setReqContent(JSObject jsObject, JSONObject obj, Response response) throws IOException { - switch (obj.optInt("buffer")) { + private Headers getHeader(JSONObject object) { + Headers.Builder builder = new Headers.Builder(); + if (object == null) return builder.build(); + for (Iterator iterator = object.keys(); iterator.hasNext(); ) { + String key = iterator.next(); + builder.add(key, object.optString(key)); + } + return builder.build(); + } + + private void setContent(JSObject jsObject, Headers headers, int buffer, byte[] bytes) throws UnsupportedEncodingException { + switch (buffer) { case 1: - byte[] bytes = response.body().bytes(); JSArray array = ctx.createNewJSArray(); for (int i = 0; i < bytes.length; i++) array.set(bytes[i], i); jsObject.setProperty("content", array); break; case 2: - jsObject.setProperty("content", Base64.encodeToString(response.body().bytes(), Base64.DEFAULT)); + jsObject.setProperty("content", Base64.encodeToString(bytes, Base64.DEFAULT)); break; default: - jsObject.setProperty("content", response.body().string()); + jsObject.setProperty("content", new String(bytes, getCharset(headers))); break; } } + + private String getCharset(Headers headers) { + String contentType = headers.get("Content-Type"); + if (TextUtils.isEmpty(contentType)) return "UTF-8"; + for (String text : contentType.split(";")) if (text.contains("charset=")) return text.split("=")[1]; + return "UTF-8"; + } } diff --git a/drpy/src/main/java/com/hiker/drpy/net/OkHttp.java b/drpy/src/main/java/com/hiker/drpy/net/OkHttp.java index 2181268ed..c579f8e04 100644 --- a/drpy/src/main/java/com/hiker/drpy/net/OkHttp.java +++ b/drpy/src/main/java/com/hiker/drpy/net/OkHttp.java @@ -2,7 +2,6 @@ package com.hiker.drpy.net; import org.json.JSONObject; -import java.util.Iterator; import java.util.concurrent.TimeUnit; import okhttp3.Call; @@ -51,17 +50,16 @@ public class OkHttp { } } - public Call newCall(String url, JSONObject object) { + public Call newCall(String url, JSONObject object, Headers headers) { int redirect = object.optInt("redirect", 1); int timeout = object.optInt("timeout", 10000); OkHttpClient client = redirect == 1 ? client() : noRedirect(); client.newBuilder().callTimeout(timeout, TimeUnit.MILLISECONDS).readTimeout(timeout, TimeUnit.MILLISECONDS).writeTimeout(timeout, TimeUnit.MILLISECONDS).connectTimeout(timeout, TimeUnit.MILLISECONDS); - return client.newCall(getRequest(url, object)); + return client.newCall(getRequest(url, object, headers)); } - private Request getRequest(String url, JSONObject object) { + private Request getRequest(String url, JSONObject object, Headers headers) { String method = object.optString("method", "get"); - Headers headers = getHeader(object.optJSONObject("headers")); if (method.equalsIgnoreCase("post")) { return new Request.Builder().url(url).headers(headers).post(getPostBody(object, headers.get("Content-Type"))).build(); } else if (method.equalsIgnoreCase("header")) { @@ -71,16 +69,6 @@ public class OkHttp { } } - private Headers getHeader(JSONObject object) { - Headers.Builder builder = new Headers.Builder(); - if (object == null) return builder.build(); - for (Iterator iterator = object.keys(); iterator.hasNext(); ) { - String key = iterator.next(); - builder.add(key, object.optString(key)); - } - return builder.build(); - } - private RequestBody getPostBody(JSONObject object, String contentType) { String body = object.optString("body").trim(); String data = object.optString("data").trim();