Fix python proxy with header

pull/589/head
FongMi 1 year ago
parent b8de5ca7f6
commit 85d3e77c2a
  1. 2
      app/src/main/java/com/fongmi/android/tv/server/Nano.java
  2. 2
      app/src/main/java/com/fongmi/android/tv/server/impl/Process.java
  3. 1
      app/src/main/java/com/fongmi/android/tv/server/process/Action.java
  4. 1
      app/src/main/java/com/fongmi/android/tv/server/process/Cache.java
  5. 1
      app/src/main/java/com/fongmi/android/tv/server/process/Local.java
  6. 1
      app/src/main/java/com/fongmi/android/tv/server/process/Media.java
  7. 1
      app/src/main/java/com/fongmi/android/tv/server/process/Parse.java
  8. 1
      app/src/main/java/com/fongmi/android/tv/server/process/Proxy.java
  9. 29
      chaquo/src/main/java/com/fongmi/chaquo/Spider.java

@ -7,7 +7,7 @@ import com.fongmi.android.tv.server.process.Cache;
import com.fongmi.android.tv.server.process.Local;
import com.fongmi.android.tv.server.process.Media;
import com.fongmi.android.tv.server.process.Parse;
import com.fongmi.android.tv.server.process.Process;
import com.fongmi.android.tv.server.impl.Process;
import com.fongmi.android.tv.server.process.Proxy;
import com.github.catvod.utils.Asset;

@ -1,4 +1,4 @@
package com.fongmi.android.tv.server.process;
package com.fongmi.android.tv.server.impl;
import org.nanohttpd.protocols.http.IHTTPSession;
import org.nanohttpd.protocols.http.response.Response;

@ -14,6 +14,7 @@ import com.fongmi.android.tv.event.RefreshEvent;
import com.fongmi.android.tv.event.ServerEvent;
import com.fongmi.android.tv.impl.Callback;
import com.fongmi.android.tv.server.Nano;
import com.fongmi.android.tv.server.impl.Process;
import com.fongmi.android.tv.utils.FileUtil;
import com.fongmi.android.tv.utils.Notify;
import com.github.catvod.net.OkHttp;

@ -3,6 +3,7 @@ package com.fongmi.android.tv.server.process;
import android.text.TextUtils;
import com.fongmi.android.tv.server.Nano;
import com.fongmi.android.tv.server.impl.Process;
import com.github.catvod.utils.Prefers;
import org.nanohttpd.protocols.http.IHTTPSession;

@ -1,6 +1,7 @@
package com.fongmi.android.tv.server.process;
import com.fongmi.android.tv.server.Nano;
import com.fongmi.android.tv.server.impl.Process;
import com.fongmi.android.tv.utils.FileUtil;
import com.github.catvod.utils.Path;
import com.google.common.net.HttpHeaders;

@ -7,6 +7,7 @@ import android.text.TextUtils;
import com.fongmi.android.tv.player.Players;
import com.fongmi.android.tv.server.Nano;
import com.fongmi.android.tv.server.Server;
import com.fongmi.android.tv.server.impl.Process;
import com.google.gson.JsonObject;
import org.nanohttpd.protocols.http.IHTTPSession;

@ -1,6 +1,7 @@
package com.fongmi.android.tv.server.process;
import com.fongmi.android.tv.server.Nano;
import com.fongmi.android.tv.server.impl.Process;
import com.github.catvod.utils.Asset;
import org.nanohttpd.protocols.http.IHTTPSession;

@ -2,6 +2,7 @@ package com.fongmi.android.tv.server.process;
import com.fongmi.android.tv.api.loader.BaseLoader;
import com.fongmi.android.tv.server.Nano;
import com.fongmi.android.tv.server.impl.Process;
import org.nanohttpd.protocols.http.IHTTPSession;
import org.nanohttpd.protocols.http.response.Response;

@ -92,14 +92,13 @@ public class Spider extends com.github.catvod.crawler.Spider {
@Override
public Object[] proxyLocal(Map<String, String> params) {
List<PyObject> list = app.callAttr("localProxy", obj, gson.toJson(params)).asList();
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);
boolean header = list.size() > 3 && list.get(3) != null;
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;
result[2] = getStream(list.get(2), base64);
result[3] = header ? getHeader(list.get(3)) : null;
return result;
}
@ -116,16 +115,24 @@ public class Spider extends com.github.catvod.crawler.Spider {
}
}
private ByteArrayInputStream getStream(PyObject o, boolean base64) {
if (o.type().toString().contains("bytes")) {
return new ByteArrayInputStream(o.toJava(byte[].class));
} else {
String content = o.toString();
if (base64 && content.contains("base64,")) content = content.split("base64,")[1];
return new ByteArrayInputStream(base64 ? Util.decode(content) : content.getBytes());
private Map<String, String> getHeader(PyObject obj) {
try {
Map<String, String> header = new HashMap<>();
for (Map.Entry<PyObject, PyObject> entry : obj.asMap().entrySet()) header.put(entry.getKey().toString(), entry.getValue().toString());
return header;
} catch (Exception e) {
return null;
}
}
private ByteArrayInputStream getStream(PyObject o, boolean base64) {
if (o == null) return null;
if (o.type().toString().contains("bytes")) return new ByteArrayInputStream(o.toJava(byte[].class));
String content = o.toString();
if (base64 && content.contains("base64,")) content = content.split("base64,")[1];
return new ByteArrayInputStream(base64 ? Util.decode(content) : content.getBytes());
}
private void download(String name) {
String path = Path.py(name).getAbsolutePath();
String url = UriUtil.resolve(api, name);

Loading…
Cancel
Save