pull/123/head
FongMi 3 years ago
parent 9c037cd510
commit c4ab638ae3
  1. 35
      drpy/src/main/java/com/hiker/drpy/method/Global.java
  2. 18
      drpy/src/main/java/com/hiker/drpy/net/OkHttp.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<String> 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";
}
}

@ -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<String> 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();

Loading…
Cancel
Save