Adjust py js proxy

pull/586/head
FongMi 2 years ago
parent 22745b5b8a
commit 7f34660a72
  1. 5
      app/src/main/java/com/fongmi/android/tv/server/Nano.java
  2. 6
      catvod/src/main/java/com/github/catvod/utils/Json.java
  3. 45
      chaquo/src/main/java/com/fongmi/chaquo/Spider.java
  4. 9
      quickjs/src/main/java/com/fongmi/quickjs/crawler/Spider.java

@ -84,7 +84,10 @@ public class Nano extends NanoHTTPD {
Map<String, String> params = session.getParms();
params.putAll(session.getHeaders());
Object[] rs = VodConfig.get().proxyLocal(params);
return rs[0] instanceof Response ? (Response) rs[0] : newChunkedResponse(Response.Status.lookup((Integer) rs[0]), (String) rs[1], (InputStream) rs[2]);
if (rs[0] instanceof Response) return (Response) rs[0];
Response response = newChunkedResponse(Response.Status.lookup((Integer) rs[0]), (String) rs[1], (InputStream) rs[2]);
if (rs.length > 3 && rs[3] != null) for (Map.Entry<String, String> entry : ((Map<String, String>) rs[3]).entrySet()) response.addHeader(entry.getKey(), entry.getValue());
return response;
} catch (Exception e) {
return error(e.getMessage());
}

@ -1,5 +1,7 @@
package com.github.catvod.utils;
import android.text.TextUtils;
import androidx.collection.ArrayMap;
import com.google.gson.JsonElement;
@ -69,6 +71,10 @@ public class Json {
}
}
public static Map<String, String> toMap(String json) {
return TextUtils.isEmpty(json) ? null : toMap(parse(json));
}
public static Map<String, String> toMap(JsonElement element) {
Map<String, String> map = new HashMap<>();
JsonObject object = safeObject(element);

@ -2,24 +2,16 @@ package com.fongmi.chaquo;
import android.content.Context;
import androidx.collection.ArrayMap;
import com.chaquo.python.PyObject;
import com.github.catvod.Proxy;
import com.github.catvod.net.OkHttp;
import com.github.catvod.utils.Json;
import com.google.common.net.HttpHeaders;
import com.github.catvod.utils.Util;
import com.google.gson.Gson;
import com.google.gson.JsonObject;
import java.io.ByteArrayInputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import fi.iki.elonen.NanoHTTPD;
import okhttp3.Headers;
public class Spider extends com.github.catvod.crawler.Spider {
private final PyObject app;
@ -88,25 +80,26 @@ public class Spider extends com.github.catvod.crawler.Spider {
}
@Override
public Object[] proxyLocal(Map<String, String> params) throws Exception {
public Object[] proxyLocal(Map<String, String> params) {
List<PyObject> list = app.callAttr("localProxy", obj, gson.toJson(params)).asList();
JsonObject action = Json.parse(list.get(2).toString()).getAsJsonObject();
Map<String, String> headers = Json.toMap(action.get("header"));
String url = action.get("url").getAsString();
String content = list.get(3).toString();
String type = list.get(1).toString();
int code = list.get(0).toInt();
if (action.get("type").getAsString().equals("redirect")) {
NanoHTTPD.Response response = NanoHTTPD.newFixedLengthResponse(NanoHTTPD.Response.Status.lookup(code), NanoHTTPD.MIME_HTML, "");
for (Map.Entry<String, String> entry : headers.entrySet()) response.addHeader(entry.getKey(), entry.getValue());
response.addHeader(HttpHeaders.LOCATION, url);
return new Object[]{response};
} else if (action.get("type").getAsString().equals("stream")) {
ArrayMap<String, String> param = Json.toArrayMap(action.get("param"));
return new Object[]{code, type, OkHttp.newCall(url, Headers.of(headers), param).execute().body().byteStream()};
Map<PyObject, PyObject> headers = list.size() > 3 ? list.get(3).asMap() : null;
boolean base64 = list.size() > 4 && list.get(4).toInt() == 1;
PyObject r2 = list.get(2);
Object[] result = new Object[4];
result[0] = list.get(0).toInt();
result[1] = list.get(1).toString();
result[2] = r2 == null ? null : getStream(r2, base64);
result[3] = headers;
return result;
}
private ByteArrayInputStream getStream(PyObject o, boolean base64) {
if (o.type().toString().contains("bytes")) {
return new ByteArrayInputStream(o.toJava(byte[].class));
} else {
if (content.isEmpty()) content = OkHttp.newCall(url, Headers.of(headers)).execute().body().string();
return new Object[]{code, type, new ByteArrayInputStream(replaceProxy(content).getBytes())};
String content = replaceProxy(o.toString());
if (base64 && content.contains("base64,")) content = content.split("base64,")[1];
return new ByteArrayInputStream(base64 ? Util.decode(content) : content.getBytes());
}
}

@ -229,11 +229,13 @@ public class Spider extends com.github.catvod.crawler.Spider {
private Object[] proxy1(Map<String, String> params) throws Exception {
JSObject object = JSUtil.toObj(ctx, params);
JSONArray array = new JSONArray(((JSArray) jsObject.getJSFunction("proxy").call(object)).stringify());
Map<String, String> headers = array.length() > 3 ? Json.toMap(array.optString(3)) : null;
boolean base64 = array.length() > 4 && array.optInt(4) == 1;
Object[] result = new Object[3];
result[0] = array.opt(0);
result[1] = array.opt(1);
Object[] result = new Object[4];
result[0] = array.optInt(0);
result[1] = array.optString(1);
result[2] = getStream(array.opt(2), base64);
result[3] = headers;
return result;
}
@ -264,4 +266,3 @@ public class Spider extends com.github.catvod.crawler.Spider {
}
}
}

Loading…
Cancel
Save