package com.github.catvod.net; import com.github.catvod.crawler.Spider; import com.github.catvod.spider.Init; import com.google.net.cronet.okhttptransport.CronetInterceptor; import org.chromium.net.CronetEngine; import java.util.List; import java.util.Map; import okhttp3.Dns; import okhttp3.OkHttpClient; public class Cronet { public static final String POST = "POST"; public static final String GET = "GET"; private final OkHttpClient noRedirect; private final OkHttpClient client; private static class Loader { static volatile Cronet INSTANCE = new Cronet(); } public static Cronet get() { return Loader.INSTANCE; } public Cronet() { client = getBuilder().build(); noRedirect = client.newBuilder().followRedirects(false).followSslRedirects(false).build(); } private OkHttpClient.Builder getBuilder() { OkHttpClient.Builder builder = OkHttp.getBuilder(); addInterceptor(builder); return builder; } private void addInterceptor(OkHttpClient.Builder builder) { try { builder.addInterceptor(CronetInterceptor.newBuilder(new CronetEngine.Builder(Init.context()).build()).build()); } catch (Exception e) { e.printStackTrace(); } } private static OkHttpClient client() { return get().client; } private static OkHttpClient noRedirect() { return get().noRedirect; } public static Dns safeDns() { try { return (Dns) Spider.class.getMethod("safeDns").invoke(null); } catch (Exception e) { return Dns.SYSTEM; } } public static void stringNoRedirect(String url, Map header, Map> respHeader) { string(noRedirect(), GET, url, null, null, header, respHeader); } public static String string(OkHttpClient client, String method, String url, String tag, Map params, Map header, Map> respHeader) { return new OkRequest(method, url, params, header, respHeader).tag(tag).execute(client).getBody(); } public static String string(String url) { return string(url, null); } public static String string(String url, Map header) { return string(url, header, null); } public static String string(String url, Map header, Map> respHeader) { return string(url, null, header, respHeader); } public static String string(String url, Map params, Map header, Map> respHeader) { return string(url, null, params, header, respHeader); } public static String string(String url, String tag, Map header) { return string(url, tag, null, header, null); } public static String string(String url, String tag, Map params, Map header, Map> respHeader) { return string(client(), GET, url, tag, params, header, respHeader); } public static String post(String url, Map params) { return post(url, params, null); } public static String post(String url, Map params, Map header) { return post(url, params, header, null); } public static String post(String url, Map params, Map header, Map> respHeader) { return string(client(), POST, url, null, params, header, respHeader); } public static OkResult postJson(String url, String json) { return postJson(url, json, null); } public static OkResult postJson(String url, String json, Map header) { return new OkRequest(POST, url, json, header).execute(client()); } public static String getRedirectLocation(Map> headers) { if (headers == null) return null; if (headers.containsKey("location")) return headers.get("location").get(0); if (headers.containsKey("Location")) return headers.get("Location").get(0); return null; } }