Update proxy hosts

release
jhengazuki 8 months ago
parent 4a300efd49
commit 259c78a5d1
  1. 19
      README.md
  2. 9
      catvod/src/main/java/com/github/catvod/bean/Proxy.java
  3. 16
      catvod/src/main/java/com/github/catvod/net/OkAuthenticator.java
  4. 2
      catvod/src/main/java/com/github/catvod/net/OkProxySelector.java
  5. 17
      other/sample/config.json

@ -155,19 +155,30 @@ http://127.0.0.1:9978/cache?do=del&key=xxx
scheme://username:password@host:port
```
配置新增 proxy 可指定走哪條代理
配置新增 proxy 可指定代理
```json
{
"spider": "",
"proxy": [
{
"name": "Global",
"host": ".*.",
"name": "全局",
"hosts": [
".*."
],
"urls": [
"http://127.0.0.1:7890",
"socks5://127.0.0.1:7891"
]
},
{
"name": "自訂",
"hosts": [
"googlevideo.com",
"raw.githubusercontent.com"
],
"urls": [
"http://127.0.0.1:7890"
]
}
]
}

@ -1,7 +1,6 @@
package com.github.catvod.bean;
import android.net.Uri;
import android.text.TextUtils;
import com.google.gson.Gson;
import com.google.gson.JsonElement;
@ -17,8 +16,8 @@ import java.util.Objects;
public class Proxy {
@SerializedName("host")
private String host;
@SerializedName("hosts")
private List<String> hosts;
@SerializedName("urls")
private List<String> urls;
@ -34,8 +33,8 @@ public class Proxy {
}
}
public String getHost() {
return TextUtils.isEmpty(host) ? "" : host;
public List<String> getHosts() {
return hosts == null ? Collections.emptyList() : hosts;
}
public List<String> getUrls() {

@ -39,15 +39,17 @@ public class OkAuthenticator implements Authenticator {
public Request authenticate(@Nullable Route route, @NonNull Response response) {
if (route == null || response.request().header(HttpHeaders.PROXY_AUTHORIZATION) != null) return null;
if (!(route.proxy().address() instanceof InetSocketAddress proxyAddress)) return null;
String requestHost = response.request().url().host();
String proxyHost = proxyAddress.getHostName();
String host = response.request().url().host();
for (Proxy item : proxy) {
if (Util.containOrMatch(host, item.getHost())) {
for (String url : item.getUrls()) {
if (url.contains(proxyHost)) {
String userInfo = Uri.parse(url).getUserInfo();
if (userInfo != null) {
return response.request().newBuilder().header(HttpHeaders.PROXY_AUTHORIZATION, Util.basic(userInfo)).build();
for (String host : item.getHosts()) {
if (Util.containOrMatch(requestHost, host)) {
for (String url : item.getUrls()) {
if (url.contains(proxyHost)) {
String userInfo = Uri.parse(url).getUserInfo();
if (userInfo != null) {
return response.request().newBuilder().header(HttpHeaders.PROXY_AUTHORIZATION, Util.basic(userInfo)).build();
}
}
}
}

@ -29,7 +29,7 @@ public class OkProxySelector extends ProxySelector {
@Override
public List<java.net.Proxy> select(URI uri) {
if (proxy.isEmpty() || uri.getHost() == null || "127.0.0.1".equals(uri.getHost())) return Proxy.NO_PROXY;
for (Proxy item : proxy) if (Util.containOrMatch(uri.getHost(), item.getHost())) return item.select();
for (Proxy item : proxy) for (String host : item.getHosts()) if (Util.containOrMatch(uri.getHost(), host)) return item.select();
return Proxy.NO_PROXY;
}

@ -36,12 +36,23 @@
],
"proxy": [
{
"name": "Global",
"host": ".*.",
"name": "全局",
"hosts": [
".*."
],
"urls": [
"http://127.0.0.1:7890",
"socks5://127.0.0.1:7891"
]
},
{
"name": "自訂",
"hosts": [
"googlevideo.com",
"raw.githubusercontent.com"
],
"urls": [
"http://127.0.0.1:7890"
]
}
],
"rules": [

Loading…
Cancel
Save