diff --git a/app/src/main/java/com/github/catvod/net/CallBack.java b/app/src/main/java/com/github/catvod/net/CallBack.java deleted file mode 100644 index cd2b03bf..00000000 --- a/app/src/main/java/com/github/catvod/net/CallBack.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.github.catvod.net; - -import java.io.IOException; - -import okhttp3.Call; -import okhttp3.Response; - -public class CallBack { - - private String result; - - public String getResult() { - return result; - } - - public void setResult(String val) { - result = val; - } - - public void onSuccess(Call call, Response response) { - setResult(onParseResponse(call, response)); - } - - public void onError() { - setResult(""); - } - - public String onParseResponse(Call call, Response response) { - try { - return response.body().string(); - } catch (IOException e) { - return ""; - } - } -} diff --git a/app/src/main/java/com/github/catvod/net/Cronet.java b/app/src/main/java/com/github/catvod/net/Cronet.java new file mode 100644 index 00000000..92fd7ce3 --- /dev/null +++ b/app/src/main/java/com/github/catvod/net/Cronet.java @@ -0,0 +1,112 @@ +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 java.util.concurrent.TimeUnit; + +import okhttp3.Dns; +import okhttp3.OkHttpClient; + +public class Cronet { + + 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() { + return new OkHttpClient.Builder().dns(safeDns()).addInterceptor(CronetInterceptor.newBuilder(new CronetEngine.Builder(Init.context()).build()).build()).callTimeout(30, TimeUnit.SECONDS).readTimeout(30, TimeUnit.SECONDS).writeTimeout(30, TimeUnit.SECONDS).connectTimeout(30, TimeUnit.SECONDS).retryOnConnectionFailure(true).hostnameVerifier(SSLSocketFactoryCompat.hostnameVerifier).sslSocketFactory(new SSLSocketFactoryCompat(), SSLSocketFactoryCompat.trustAllCert); + } + + 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(), OkHttp.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); + } + + 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(), OkHttp.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(), OkHttp.POST, url, null, params, header, respHeader); + } + + public static String postJson(String url, String json) { + return postJson(url, json, null); + } + + public static String postJson(String url, String json, Map header) { + return new OkRequest(OkHttp.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; + } +} diff --git a/app/src/main/java/com/github/catvod/net/OkHttp.java b/app/src/main/java/com/github/catvod/net/OkHttp.java index 64d7aabb..4eaedf68 100644 --- a/app/src/main/java/com/github/catvod/net/OkHttp.java +++ b/app/src/main/java/com/github/catvod/net/OkHttp.java @@ -1,10 +1,6 @@ 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; @@ -13,12 +9,11 @@ import java.util.concurrent.TimeUnit; import okhttp3.Call; import okhttp3.Dns; import okhttp3.OkHttpClient; -import okhttp3.Response; public class OkHttp { - public static final String METHOD_POST = "POST"; - public static final String METHOD_GET = "GET"; + public static final String POST = "POST"; + public static final String GET = "GET"; private final OkHttpClient noRedirect; private final OkHttpClient client; @@ -37,8 +32,7 @@ public class OkHttp { } private OkHttpClient.Builder getBuilder() { - CronetEngine engine = new CronetEngine.Builder(Init.context()).build(); - return new OkHttpClient.Builder().dns(safeDns()).addInterceptor(CronetInterceptor.newBuilder(engine).build()).callTimeout(30, TimeUnit.SECONDS).readTimeout(30, TimeUnit.SECONDS).writeTimeout(30, TimeUnit.SECONDS).connectTimeout(30, TimeUnit.SECONDS).retryOnConnectionFailure(true).hostnameVerifier(SSLSocketFactoryCompat.hostnameVerifier).sslSocketFactory(new SSLSocketFactoryCompat(), SSLSocketFactoryCompat.trustAllCert); + return new OkHttpClient.Builder().dns(safeDns()).callTimeout(30, TimeUnit.SECONDS).readTimeout(30, TimeUnit.SECONDS).writeTimeout(30, TimeUnit.SECONDS).connectTimeout(30, TimeUnit.SECONDS).retryOnConnectionFailure(true).hostnameVerifier(SSLSocketFactoryCompat.hostnameVerifier).sslSocketFactory(new SSLSocketFactoryCompat(), SSLSocketFactoryCompat.trustAllCert); } private static OkHttpClient client() { @@ -57,105 +51,69 @@ public class OkHttp { } } - public static void stringNoRedirect(String url, Map headerMap, Map> respHeaderMap) { - string(noRedirect(), url, null, null, headerMap, respHeaderMap, OkHttp.METHOD_GET); + 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 url, String tag, Map paramsMap, Map headerMap, Map> respHeaderMap, String httpMethod) { - CallBack callback = new CallBack() { - @Override - public String onParseResponse(Call call, Response response) { - if (respHeaderMap != null) { - respHeaderMap.clear(); - respHeaderMap.putAll(response.headers().toMultimap()); - } - return super.onParseResponse(call, response); - } - }; - OkRequest req = new OkRequest(httpMethod, url, paramsMap, headerMap, callback); - req.setTag(tag); - req.execute(client); - return callback.getResult(); + 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); } public static String string(String url) { return string(url, null); } - public static String string(String url, Map headerMap) { - return string(url, headerMap, null); + public static String string(String url, Map header) { + return string(url, header, null); } - public static String string(String url, Map headerMap, Map> respHeaderMap) { - return string(url, null, headerMap, respHeaderMap); + public static String string(String url, Map header, Map> respHeader) { + return string(url, null, header, respHeader); } - public static String string(String url, Map paramsMap, Map headerMap, Map> respHeaderMap) { - return string(url, null, paramsMap, headerMap, respHeaderMap); + 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 headerMap) { - return string(url, tag, null, headerMap, null); + 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 paramsMap, Map headerMap, Map> respHeaderMap) { - return string(client(), url, tag, paramsMap, headerMap, respHeaderMap, OkHttp.METHOD_GET); + 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 void get(String url, CallBack callBack) { - get(url, null, callBack); + public static String post(String url, Map params) { + return post(url, params, null); } - public static void get(String url, Map paramsMap, CallBack callBack) { - get(url, paramsMap, null, callBack); + public static String post(String url, Map params, Map header) { + return post(url, params, header, null); } - public static void get(String url, Map paramsMap, Map headerMap, CallBack callBack) { - new OkRequest(METHOD_GET, url, paramsMap, headerMap, callBack).execute(client()); - } - - public static String post(String url) { - return post(url, null); - } - - public static String post(String url, Map paramsMap) { - return post(url, paramsMap, null); - } - - public static String post(String url, Map paramsMap, Map headerMap) { - return post(url, paramsMap, headerMap, null); - } - - public static String post(String url, Map paramsMap, Map headerMap, Map> respHeaderMap) { - return string(client(), url, null, paramsMap, headerMap, respHeaderMap, METHOD_POST); + public static String post(String url, Map params, Map header, Map> respHeader) { + return string(client(), POST, url, null, params, header, respHeader); } public static String postJson(String url, String json) { return postJson(url, json, null); } - public static String postJson(String url, String json, Map headerMap) { - CallBack callback = new CallBack(); - new OkRequest(METHOD_POST, url, json, headerMap, callback).execute(client()); - return callback.getResult(); - } - - public static void cancel(OkHttpClient client, Object tag) { - if (client == null || tag == null) return; - for (Call call : client.dispatcher().queuedCalls()) { - if (tag.equals(call.request().tag())) { - call.cancel(); - } - } - for (Call call : client.dispatcher().runningCalls()) { - if (tag.equals(call.request().tag())) { - call.cancel(); - } - } + public static String postJson(String url, String json, Map header) { + return new OkRequest(POST, url, json, header).execute(client()); } public static void cancel(Object tag) { - cancel(client(), tag); + for (Call call : client().dispatcher().queuedCalls()) { + if (tag.equals(call.request().tag())) { + call.cancel(); + } + } + for (Call call : client().dispatcher().runningCalls()) { + if (tag.equals(call.request().tag())) { + call.cancel(); + } + } } public static String getRedirectLocation(Map> headers) { diff --git a/app/src/main/java/com/github/catvod/net/OkRequest.java b/app/src/main/java/com/github/catvod/net/OkRequest.java index bdca4313..fb176531 100644 --- a/app/src/main/java/com/github/catvod/net/OkRequest.java +++ b/app/src/main/java/com/github/catvod/net/OkRequest.java @@ -2,10 +2,12 @@ package com.github.catvod.net; import android.text.TextUtils; +import com.github.catvod.utils.Misc; + import java.io.IOException; +import java.util.List; import java.util.Map; -import okhttp3.Call; import okhttp3.FormBody; import okhttp3.MediaType; import okhttp3.OkHttpClient; @@ -15,100 +17,68 @@ import okhttp3.Response; class OkRequest { - private final String mMethodType; - private final Map mParamsMap; - private final String mJsonStr; - private final Map mHeaderMap; - private final CallBack mCallBack; - private String mUrl; - private Object mTag = null; - private Request mOkHttpRequest; - private Request.Builder mRequestBuilder; + private final Map> respHeader; + private final Map header; + private final Map params; + private final String method; + private final String json; + private Request request; + private String url; + private Object tag; - OkRequest(String methodType, String url, Map paramsMap, Map headerMap, CallBack callBack) { - this(methodType, url, null, paramsMap, headerMap, callBack); + OkRequest(String method, String url, Map params, Map header, Map> respHeader) { + this(method, url, null, params, header, respHeader); } - OkRequest(String methodType, String url, String jsonStr, Map headerMap, CallBack callBack) { - this(methodType, url, jsonStr, null, headerMap, callBack); + OkRequest(String method, String url, String json, Map header) { + this(method, url, json, null, header, null); } - private OkRequest(String methodType, String url, String jsonStr, Map paramsMap, Map headerMap, CallBack callBack) { - mMethodType = methodType; - mUrl = url; - mJsonStr = jsonStr; - mParamsMap = paramsMap; - mHeaderMap = headerMap; - mCallBack = callBack; + private OkRequest(String method, String url, String json, Map params, Map header, Map> respHeader) { + this.url = url; + this.json = json; + this.method = method; + this.params = params; + this.header = header; + this.respHeader = respHeader; getInstance(); } - public void setTag(Object tag) { - mTag = tag; + public OkRequest tag(Object tag) { + this.tag = tag; + return this; } private void getInstance() { - mRequestBuilder = new Request.Builder(); - switch (mMethodType) { - case OkHttp.METHOD_GET: - setGetParams(); - break; - case OkHttp.METHOD_POST: - mRequestBuilder.post(getRequestBody()); - break; - } - mRequestBuilder.url(mUrl); - if (mTag != null) - mRequestBuilder.tag(mTag); - if (mHeaderMap != null) { - setHeader(); - } - mOkHttpRequest = mRequestBuilder.build(); + Request.Builder builder = new Request.Builder().url(url); + if (method.equals(OkHttp.GET) && params != null) setParams(); + if (method.equals(OkHttp.POST)) builder.post(getRequestBody()); + if (header != null) for (String key : header.keySet()) builder.addHeader(key, header.get(key)); + if (tag != null) builder.tag(tag); + request = builder.build(); } private RequestBody getRequestBody() { - if (!TextUtils.isEmpty(mJsonStr)) { - MediaType JSON = MediaType.parse("application/json; charset=utf-8"); - return RequestBody.create(JSON, mJsonStr); - } + if (!TextUtils.isEmpty(json)) return RequestBody.create(MediaType.parse("application/json; charset=utf-8"), json); FormBody.Builder formBody = new FormBody.Builder(); - if (mParamsMap != null) { - for (String key : mParamsMap.keySet()) { - formBody.add(key, mParamsMap.get(key)); - } - } + if (params != null) for (String key : params.keySet()) formBody.add(key, params.get(key)); return formBody.build(); } - private void setGetParams() { - if (mParamsMap != null) { - mUrl = mUrl + "?"; - for (String key : mParamsMap.keySet()) { - mUrl = mUrl + key + "=" + mParamsMap.get(key) + "&"; - } - mUrl = mUrl.substring(0, mUrl.length() - 1); - } + private void setParams() { + url = url + "?"; + for (String key : params.keySet()) url = url.concat(key + "=" + params.get(key) + "&"); + url = Misc.substring(url); } - private void setHeader() { - if (mHeaderMap != null) { - for (String key : mHeaderMap.keySet()) { - mRequestBuilder.addHeader(key, mHeaderMap.get(key)); - } - } - } - - void execute(OkHttpClient client) { - Call call = client.newCall(mOkHttpRequest); + public String execute(OkHttpClient client) { try { - Response response = call.execute(); - if (mCallBack != null) { - mCallBack.onSuccess(call, response); - } + Response response = client.newCall(request).execute(); + if (respHeader != null) respHeader.clear(); + if (respHeader != null) respHeader.putAll(response.headers().toMultimap()); + return response.body().string(); } catch (IOException e) { - if (mCallBack != null) { - mCallBack.onError(); - } + return ""; } } } diff --git a/jar/custom_spider.jar b/jar/custom_spider.jar index 51b6f982..c773bf53 100644 Binary files a/jar/custom_spider.jar and b/jar/custom_spider.jar differ diff --git a/jar/custom_spider.jar.md5 b/jar/custom_spider.jar.md5 index 7ff47ebd..5ab7dbe2 100644 --- a/jar/custom_spider.jar.md5 +++ b/jar/custom_spider.jar.md5 @@ -1 +1 @@ -ce84daad0cfc263a89e8c5020e871cbb +e57bac3dfa1c49f28c44b56577e70786