Fix img header

pull/137/head
FongMi 3 years ago
parent 03615a25b0
commit cb3a9809ee
  1. 3
      app/src/main/java/com/fongmi/android/tv/bean/History.java
  2. 2
      app/src/main/java/com/fongmi/android/tv/player/ExoUtil.java
  3. 2
      app/src/main/java/com/fongmi/android/tv/player/IjkUtil.java
  4. 11
      app/src/main/java/com/fongmi/android/tv/ui/custom/CustomWebView.java
  5. 16
      app/src/main/java/com/fongmi/android/tv/utils/ImgUtil.java
  6. 2
      app/src/main/java/com/fongmi/android/tv/utils/Utils.java

@ -65,8 +65,7 @@ public class History {
}
public static List<History> arrayFrom(String str) {
Type listType = new TypeToken<List<History>>() {
}.getType();
Type listType = new TypeToken<List<History>>() {}.getType();
List<History> items = new Gson().fromJson(str, listType);
return items == null ? Collections.emptyList() : items;
}

@ -163,7 +163,7 @@ public class ExoUtil {
private static synchronized DataSource.Factory getDataSourceFactory(Map<String, String> headers) {
if (dataSourceFactory == null) dataSourceFactory = buildReadOnlyCacheDataSource(new DefaultDataSource.Factory(App.get(), getHttpDataSourceFactory()), getCache());
httpDataSourceFactory.setDefaultRequestProperties(Utils.checkHeaders(headers));
httpDataSourceFactory.setDefaultRequestProperties(Utils.checkUa(headers));
return dataSourceFactory;
}

@ -21,6 +21,6 @@ public class IjkUtil {
public static MediaSource getSource(Map<String, String> headers, String url) {
Uri uri = Uri.parse(url.trim().replace("\\", ""));
if (Sniffer.isAds(uri)) uri = Uri.parse(Server.get().getAddress().concat("/m3u8?url=").concat(URLEncoder.encode(url)));
return new MediaSource(Utils.checkHeaders(headers), uri);
return new MediaSource(Utils.checkUa(headers), uri);
}
}

@ -24,16 +24,12 @@ import com.fongmi.android.tv.utils.Sniffer;
import com.github.catvod.crawler.Spider;
import java.io.ByteArrayInputStream;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class CustomWebView extends WebView {
private WebResourceResponse empty;
private ParseCallback callback;
private List<String> keys;
private Runnable timer;
private String from;
private String key;
@ -50,7 +46,6 @@ public class CustomWebView extends WebView {
@SuppressLint("SetJavaScriptEnabled")
public void initSettings() {
this.timer = () -> stop(true);
this.keys = Arrays.asList("user-agent", "referer", "origin");
this.empty = new WebResourceResponse("text/plain", "utf-8", new ByteArrayInputStream("".getBytes()));
getSettings().setUseWideViewPort(true);
getSettings().setDatabaseEnabled(true);
@ -120,11 +115,9 @@ public class CustomWebView extends WebView {
}
private void post(Map<String, String> headers, String url) {
Map<String, String> news = new HashMap<>();
String cookie = CookieManager.getInstance().getCookie(url);
if (!TextUtils.isEmpty(cookie)) news.put("cookie", cookie);
for (String key : headers.keySet()) if (keys.contains(key.toLowerCase())) news.put(key, headers.get(key));
onParseSuccess(news, url);
if (cookie != null) headers.put("cookie", cookie);
onParseSuccess(headers, url);
}
public void stop(boolean error) {

@ -23,6 +23,7 @@ import com.fongmi.android.tv.R;
import com.fongmi.android.tv.Setting;
import com.github.catvod.utils.Json;
import com.github.catvod.utils.Util;
import com.google.common.net.HttpHeaders;
import com.google.gson.JsonParser;
import java.io.ByteArrayOutputStream;
@ -69,15 +70,22 @@ public class ImgUtil {
if (url.startsWith("data:")) return url;
LazyHeaders.Builder builder = new LazyHeaders.Builder();
if (url.contains("@Headers=")) addHeader(builder, param = url.split("@Headers=")[1].split("@")[0]);
if (url.contains("@Cookie=")) builder.addHeader("Cookie", param = url.split("@Cookie=")[1].split("@")[0]);
if (url.contains("@Referer=")) builder.addHeader("Referer", param = url.split("@Referer=")[1].split("@")[0]);
if (url.contains("@User-Agent=")) builder.addHeader("User-Agent", param = url.split("@User-Agent=")[1].split("@")[0]);
if (url.contains("@Cookie=")) builder.addHeader(HttpHeaders.COOKIE, param = url.split("@Cookie=")[1].split("@")[0]);
if (url.contains("@Referer=")) builder.addHeader(HttpHeaders.REFERER, param = url.split("@Referer=")[1].split("@")[0]);
if (url.contains("@User-Agent=")) builder.addHeader(HttpHeaders.USER_AGENT, param = url.split("@User-Agent=")[1].split("@")[0]);
return new GlideUrl(param == null ? url : url.split("@")[0], builder.build());
}
private static void addHeader(LazyHeaders.Builder builder, String header) {
Map<String, String> map = Json.toMap(JsonParser.parseString(header));
for (Map.Entry<String, String> entry : map.entrySet()) builder.addHeader(entry.getKey(), entry.getValue());
for (Map.Entry<String, String> entry : map.entrySet()) builder.addHeader(replace(entry.getKey()), entry.getValue());
}
private static String replace(String key) {
if (key.equals("user-agent")) return HttpHeaders.USER_AGENT;
if (key.equals("referer")) return HttpHeaders.REFERER;
if (key.equals("cookie")) return HttpHeaders.COOKIE;
return key;
}
public static byte[] resize(byte[] bytes) {

@ -95,7 +95,7 @@ public class Utils {
return ((ClipboardManager) App.get().getSystemService(Context.CLIPBOARD_SERVICE)).getText();
}
public static Map<String, String> checkHeaders(Map<String, String> headers) {
public static Map<String, String> checkUa(Map<String, String> headers) {
if (Setting.getUa().isEmpty() || headers.containsKey(HttpHeaders.USER_AGENT) || headers.containsKey(HttpHeaders.USER_AGENT.toLowerCase())) return headers;
headers.put(HttpHeaders.USER_AGENT, Setting.getUa());
return headers;

Loading…
Cancel
Save