diff --git a/app/build.gradle b/app/build.gradle index 943970949..003553173 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -125,7 +125,6 @@ dependencies { implementation 'org.fourthline.cling:cling-core:2.1.1' implementation 'org.fourthline.cling:cling-support:2.1.1' implementation 'org.greenrobot:eventbus:3.3.1' - implementation 'org.nanohttpd:nanohttpd:2.3.1' implementation('org.simpleframework:simple-xml:2.7.1') { exclude group: 'stax', module: 'stax-api' exclude group: 'xpp3', module: 'xpp3' } implementation(ext: 'aar', name: 'dlna-core', group: 'fongmi', version: 'release') leanbackImplementation(ext: 'aar', name: 'dlna-dmr', group: 'fongmi', version: 'release') diff --git a/catvod/build.gradle b/catvod/build.gradle index cf7f79544..8d26bb222 100644 --- a/catvod/build.gradle +++ b/catvod/build.gradle @@ -19,4 +19,5 @@ dependencies { api 'com.orhanobut:logger:2.2.0' api 'com.squareup.okhttp3:okhttp:' + okhttpVersion api 'com.squareup.okhttp3:okhttp-dnsoverhttps:' + okhttpVersion + api 'org.nanohttpd:nanohttpd:2.3.1' } \ No newline at end of file diff --git a/pyramid/src/main/java/com/undcover/freedom/pyramid/Spider.java b/pyramid/src/main/java/com/undcover/freedom/pyramid/Spider.java index bb3947b97..97b5b61c7 100644 --- a/pyramid/src/main/java/com/undcover/freedom/pyramid/Spider.java +++ b/pyramid/src/main/java/com/undcover/freedom/pyramid/Spider.java @@ -8,6 +8,7 @@ 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.google.gson.Gson; import com.google.gson.JsonObject; import com.google.gson.JsonParser; @@ -17,6 +18,7 @@ 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 { @@ -89,17 +91,22 @@ public class Spider extends com.github.catvod.crawler.Spider { @Override public Object[] proxyLocal(Map params) throws Exception { List list = app.callAttr("localProxy", obj, gson.toJson(params)).asList(); - int code = list.get(0).toInt(); - String type = list.get(1).toString(); - String content = list.get(3).toString(); JsonObject action = JsonParser.parseString(list.get(2).toString()).getAsJsonObject(); - Headers headers = Headers.of(Json.toMap(action.get("header"))); + Map headers = Json.toMap(action.get("header")); String url = action.get("url").getAsString(); - if (action.get("type").getAsString().equals("stream")) { + 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 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 param = Json.toArrayMap(action.get("param")); - return new Object[]{code, type, OkHttp.newCall(url, headers, param).execute().body().byteStream()}; + return new Object[]{code, type, OkHttp.newCall(url, Headers.of(headers), param).execute().body().byteStream()}; } else { - if (content.isEmpty()) content = OkHttp.newCall(url, headers).execute().body().string(); + if (content.isEmpty()) content = OkHttp.newCall(url, Headers.of(headers)).execute().body().string(); return new Object[]{code, type, new ByteArrayInputStream(replaceProxy(content).getBytes())}; } }