Files
FLYSN/app/src/main/java/com/info/sn/utils/URLUtils.java
fanhuitong 0fa06f8f2a version:1.6.1
fix:休息日管控完善
add:
2021-09-02 18:29:04 +08:00

252 lines
9.4 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package com.info.sn.utils;
import android.content.Context;
import android.os.Build;
import android.text.TextUtils;
import android.util.Log;
import android.webkit.WebSettings;
import java.io.IOException;
import java.net.URI;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.function.Predicate;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import io.reactivex.Observable;
import io.reactivex.ObservableEmitter;
import io.reactivex.ObservableOnSubscribe;
import io.reactivex.Observer;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.Disposable;
import io.reactivex.schedulers.Schedulers;
import okhttp3.Call;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
public class URLUtils {
private static String TAG = URLUtils.class.getSimpleName();
private Context mContext;
private HashSet<String> baseURLList = new HashSet<>();
public URLUtils(Context context) {
this.mContext = context;
}
public void setBrowserList() {
String whiteList = JGYUtils.getString(mContext.getContentResolver(), "DeselectBrowserArray");
String homePage = JGYUtils.getString(mContext.getContentResolver(), "homepagURL");
HashSet<String> URLList = new HashSet<>();
if (!TextUtils.isEmpty(whiteList)){
URLList.addAll(Arrays.asList(whiteList.split(",")));
}
URLList.add("https://xdf.gankao.com");
URLList.add("https://www.gankao.com");
if (!TextUtils.isEmpty(homePage)) {
if (!URLList.contains(homePage)) {
URLList.add(homePage);
}
}
URLList.removeIf(new Predicate<String>() {
@Override
public boolean test(String s) {
return TextUtils.isEmpty(s.trim());
}
});
Log.e(TAG, "setBrowserList: " + URLList);
Observable.create(new ObservableOnSubscribe<String>() {
@Override
public void subscribe(ObservableEmitter<String> emitter) throws Exception {
baseURLList.clear();
baseURLList.addAll(URLList);
for (String url : URLList) {
if (TextUtils.isEmpty(url.trim())){
continue;
}
if (url.startsWith("http://")) {
String noHttp = url.substring(7);
if (!baseURLList.contains(noHttp)) {
baseURLList.add(noHttp);
}
emitter.onNext(getOkHttpURL(url));
} else if (url.startsWith("https://")) {
String noHttps = url.substring(8);
if (!baseURLList.contains(noHttps)) {
baseURLList.add(noHttps);
}
emitter.onNext(getOkHttpURL(url));
} else {
baseURLList.add("http://" + url);
emitter.onNext(getOkHttpURL("http://" + url));
baseURLList.add("https://" + url);
emitter.onNext(getOkHttpURL("https://" + url));
}
Log.e(TAG, "subscribe: " + url);
}
emitter.onComplete();
}
}).subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<String>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(String s) {
Log.e(TAG, "onNext: " + s);
if (!baseURLList.contains(s)) {
baseURLList.add(s);
}
if (s.startsWith("http://")) {
String noHttp = s.substring(7);
Log.e(TAG, "onNext: noHttp: " + noHttp);
if (!baseURLList.contains(noHttp)) {
baseURLList.add(noHttp);
}
}
if (s.startsWith("https://")) {
String noHttps = s.substring(8);
Log.e(TAG, "onNext: noHttps: " + noHttps);
if (!baseURLList.contains(noHttps)) {
baseURLList.add(noHttps);
}
}
}
@Override
public void onError(Throwable e) {
Log.e(TAG, "onError: " + e.getMessage());
}
@Override
public void onComplete() {
Log.e(TAG, "onComplete: ");
StringBuilder stringBuilder = new StringBuilder();
for (String s : baseURLList) {
if (stringBuilder.length() > 0) {
stringBuilder.append(",");
}
stringBuilder.append(s);
}
String DeselectBrowserArray = stringBuilder.toString();
boolean write = JGYUtils.putString(mContext.getContentResolver(), "DeselectBrowserArray", DeselectBrowserArray);
Log.e(TAG, "onComplete: " + "white list: " + DeselectBrowserArray);
Log.e(TAG, "onComplete: " + "write :" + write);
}
});
}
private String getOkHttpURL(String URL) {
OkHttpClient okHttpClient = new OkHttpClient();
final Request request = new Request.Builder()
.url(URL)
.removeHeader("User-Agent")
.addHeader("User-Agent", getUserAgent())
.get()//默认就是GET请求可以不写
.build();
Call call = okHttpClient.newCall(request);
// call.enqueue(new Callback() {
// @Override
// public void onFailure(Call call, IOException e) {
// Log.e(TAG, "onFailure: ");
// }
//
// @Override
// public void onResponse(Call call, Response response) throws IOException {
// Log.e(TAG, "onResponse: " + getIP(response.request().url().uri()));
// }
// });
try {
Response response = call.execute();
if (response.isSuccessful()) {
Log.e(TAG, "getOkHttpURL: " + response.request().url().toString());
return getIP(response.request().url().uri()).toString();
} else {
return "";
}
} catch (IOException e) {
e.printStackTrace();
Log.e(TAG, "getOkHttpURL: " + e.getMessage());
return "";
}
}
/**
* Gets ip.
* 通过url获取到域名
*
* @param url the url
* @return the ip
*/
public String getIP(String url) {
//使用正则表达式过滤,
String re = "((http|ftp|https)://)(([a-zA-Z0-9._-]+)|([0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}))(([a-zA-Z]{2,6})|(:[0-9]{1,4})?)";
String str = "";
// 编译正则表达式
Pattern pattern = Pattern.compile(re);
// 忽略大小写的写法
// Pattern pat = Pattern.compile(regEx, Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(url);
//若url==http://127.0.0.1:9040或www.baidu.com的正则表达式表示匹配
if (matcher.matches()) {
str = url;
} else {
String[] split2 = url.split(re);
if (split2.length > 1) {
String substring = url.substring(0, url.length() - split2[1].length());
str = substring;
} else {
str = split2[0];
}
}
return str;
}
private URI getIP(URI uri) {
URI effectiveURI = null;
try {
// URI(String scheme, String userInfo, String host, int port, String
// path, String query,String fragment)
effectiveURI = new URI(uri.getScheme(), uri.getUserInfo(), uri.getHost(), uri.getPort(), null, null, null);
} catch (Throwable var4) {
effectiveURI = null;
}
return effectiveURI;
}
/**
* @return 获取浏览器的UA
*/
private String getUserAgent() {
String userAgent = "";
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
try {
userAgent = WebSettings.getDefaultUserAgent(mContext);
//需要hook webview
} catch (Exception e) {
Log.e(TAG, "getUserAgent: " + e.getMessage());
userAgent = System.getProperty("http.agent");
}
} else {
userAgent = System.getProperty("http.agent");
}
StringBuffer sb = new StringBuffer();
for (int i = 0, length = userAgent.length(); i < length; i++) {
char c = userAgent.charAt(i);
if (c <= '\u001f' || c >= '\u007f') {
sb.append(String.format("\\u%04x", (int) c));
} else {
sb.append(c);
}
}
// Log.e(TAG, "getUserAgent: " + sb.toString());
return sb.toString();
}
}