Support single proxy - part 4

pull/142/head
FongMi 3 years ago
parent 9fbd7fe2f4
commit 2c364750ef
  1. 63
      catvod/src/main/java/com/github/catvod/net/OkHttp.java
  2. 4
      quickjs/src/main/java/com/fongmi/quickjs/utils/Connect.java

@ -37,9 +37,7 @@ public class OkHttp {
private DnsOverHttps dns;
private OkHttpClient client;
private OkHttpClient noRedirect;
private OkHttpClient clientProxy;
private OkHttpClient noRedirectProxy;
private static class Loader {
static volatile OkHttp INSTANCE = new OkHttp();
@ -49,60 +47,55 @@ public class OkHttp {
return Loader.INSTANCE;
}
public static Dns dns() {
return get().dns != null ? get().dns : Dns.SYSTEM;
}
public static Uri proxy() {
return Uri.parse(Prefers.getString("proxy"));
}
public void setDoh(Doh doh) {
OkHttpClient dohClient = new OkHttpClient.Builder().cache(new Cache(Path.doh(), CACHE)).hostnameVerifier(SSLCompat.VERIFIER).sslSocketFactory(new SSLCompat(), SSLCompat.TM).build();
dns = doh.getUrl().isEmpty() ? null : new DnsOverHttps.Builder().client(dohClient).url(HttpUrl.get(doh.getUrl())).bootstrapDnsHosts(doh.getHosts()).build();
noRedirectProxy = null;
clientProxy = null;
noRedirect = null;
client = null;
}
public void setProxy() {
Authenticator.setDefault(null);
noRedirectProxy = null;
clientProxy = null;
}
public static OkHttpClient client(boolean proxy, boolean redirect) {
if (proxy) return redirect ? clientProxy() : noRedirectProxy();
else return redirect ? client() : noRedirect();
}
public static OkHttpClient client() {
if (get().client != null) return get().client;
return get().client = client(TIMEOUT);
}
public static OkHttpClient noRedirect() {
if (get().noRedirect != null) return get().noRedirect;
return get().noRedirect = client().newBuilder().followRedirects(false).followSslRedirects(false).build();
return get().client = getBuilder().build();
}
public static OkHttpClient clientProxy() {
if (get().clientProxy != null) return get().clientProxy;
return get().clientProxy = clientProxy(TIMEOUT);
return get().clientProxy = getBuilder(proxy()).build();
}
public static OkHttpClient noRedirectProxy() {
if (get().noRedirectProxy != null) return get().noRedirectProxy;
return get().noRedirectProxy = clientProxy().newBuilder().followRedirects(false).followSslRedirects(false).build();
public static OkHttpClient client(int timeout) {
return client().newBuilder().connectTimeout(timeout, TimeUnit.MILLISECONDS).readTimeout(timeout, TimeUnit.MILLISECONDS).writeTimeout(timeout, TimeUnit.MILLISECONDS).build();
}
public static Dns dns() {
return get().dns != null ? get().dns : Dns.SYSTEM;
public static OkHttpClient clientProxy(int timeout) {
return clientProxy().newBuilder().connectTimeout(timeout, TimeUnit.MILLISECONDS).readTimeout(timeout, TimeUnit.MILLISECONDS).writeTimeout(timeout, TimeUnit.MILLISECONDS).build();
}
public static Uri proxy() {
return Uri.parse(Prefers.getString("proxy"));
public static OkHttpClient noRedirect(int timeout) {
return client().newBuilder().connectTimeout(timeout, TimeUnit.MILLISECONDS).readTimeout(timeout, TimeUnit.MILLISECONDS).writeTimeout(timeout, TimeUnit.MILLISECONDS).followRedirects(false).followSslRedirects(false).build();
}
public static OkHttpClient client(int timeout) {
return new OkHttpClient.Builder().addInterceptor(new DeflateInterceptor()).connectTimeout(timeout, TimeUnit.MILLISECONDS).readTimeout(timeout, TimeUnit.MILLISECONDS).writeTimeout(timeout, TimeUnit.MILLISECONDS).dns(dns()).hostnameVerifier(SSLCompat.VERIFIER).sslSocketFactory(new SSLCompat(), SSLCompat.TM).build();
public static OkHttpClient noRedirectProxy(int timeout) {
return clientProxy().newBuilder().connectTimeout(timeout, TimeUnit.MILLISECONDS).readTimeout(timeout, TimeUnit.MILLISECONDS).writeTimeout(timeout, TimeUnit.MILLISECONDS).followRedirects(false).followSslRedirects(false).build();
}
public static OkHttpClient clientProxy(int timeout) {
return getProxyBuilder(proxy(), timeout).build();
public static OkHttpClient client(boolean proxy, boolean redirect, int timeout) {
if (proxy) return redirect ? clientProxy(timeout) : noRedirectProxy(timeout);
else return redirect ? client(timeout) : noRedirect(timeout);
}
public static Call newCall(String url) {
@ -147,13 +140,17 @@ public class OkHttp {
return builder.build();
}
private static OkHttpClient.Builder getProxyBuilder(Uri uri, int timeout) {
private static OkHttpClient.Builder getBuilder() {
return new OkHttpClient.Builder().addInterceptor(new DeflateInterceptor()).connectTimeout(TIMEOUT, TimeUnit.MILLISECONDS).readTimeout(TIMEOUT, TimeUnit.MILLISECONDS).writeTimeout(TIMEOUT, TimeUnit.MILLISECONDS).dns(dns()).hostnameVerifier(SSLCompat.VERIFIER).sslSocketFactory(new SSLCompat(), SSLCompat.TM);
}
private static OkHttpClient.Builder getBuilder(Uri uri) {
String userInfo = uri.getUserInfo();
OkHttpClient.Builder builder = client(timeout).newBuilder();
OkHttpClient.Builder builder = client().newBuilder();
if (userInfo != null && userInfo.contains(":")) setAuthenticator(builder, userInfo);
if (uri.getScheme() != null && uri.getHost() != null && uri.getPort() > 0) return builder;
if (Util.scheme(uri).startsWith("http")) builder.proxy(new Proxy(Proxy.Type.HTTP, InetSocketAddress.createUnresolved(uri.getHost(), uri.getPort())));
if (Util.scheme(uri).startsWith("socks")) builder.proxy(new Proxy(Proxy.Type.SOCKS, InetSocketAddress.createUnresolved(uri.getHost(), uri.getPort())));
if (uri.getScheme() == null || uri.getHost() == null || uri.getPort() <= 0) return builder;
if (uri.getScheme().startsWith("http")) builder.proxy(new Proxy(Proxy.Type.HTTP, InetSocketAddress.createUnresolved(uri.getHost(), uri.getPort())));
if (uri.getScheme().startsWith("socks")) builder.proxy(new Proxy(Proxy.Type.SOCKS, InetSocketAddress.createUnresolved(uri.getHost(), uri.getPort())));
return builder;
}

@ -10,7 +10,6 @@ import com.whl.quickjs.wrapper.QuickJSContext;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import okhttp3.Call;
import okhttp3.FormBody;
@ -24,8 +23,7 @@ import okhttp3.Response;
public class Connect {
public static Call to(String url, Req req, boolean proxy) {
OkHttpClient client = OkHttp.client(proxy, req.isRedirect());
client = client.newBuilder().connectTimeout(req.getTimeout(), TimeUnit.MILLISECONDS).readTimeout(req.getTimeout(), TimeUnit.MILLISECONDS).writeTimeout(req.getTimeout(), TimeUnit.MILLISECONDS).build();
OkHttpClient client = OkHttp.client(proxy, req.isRedirect(), req.getTimeout());
return client.newCall(getRequest(url, req, Headers.of(req.getHeader())));
}

Loading…
Cancel
Save