那么问题来了,app怎么防抓取???
通过以下方案解决接口抓取问题!!!
方案一:通过判断手机是否设置了代理
/**
* 是否设置了WIFI代理
*
* @return
*/
private static boolean isWifiProxy() {
final boolean IS_ICS_OR_LATER = Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH;
String proxyAddress;
int proxyPort;
if (IS_ICS_OR_LATER) {
proxyAddress = System.getProperty("http.proxyHost");
String portStr = System.getProperty("http.proxyPort");
proxyPort = Integer.parseInt((portStr != null ? portStr : "-1"));
} else {
proxyAddress = android.net.Proxy.getHost(BaseApplication.getInstance());
proxyPort = android.net.Proxy.getPort(BaseApplication.getInstance());
}
return (!TextUtils.isEmpty(proxyAddress)) && (proxyPort != -1);
}
/**
* 接口请求案例
*/
public static void request() {
if (isWifiProxy()) {
// 如果使用了代理
return;
} else {
// 如果没有使用代理,则进行接口请求
}
}
该方案如果设置了代理,则就不进行接口请求,但是如果你的正常/普通用户需要使用网络代理,同时又去使用你的app,就会给用户带来不太友好的体验,显然这种方案具有局限性。
方案二:通过网络请求时禁用代理
Proxy.NO_PROXY 代表DIRECT
连接的代理设置,基本上告诉协议处理程序不使用任何代理。
try{
java.net.URL url = new java.net.URL("https://www.xxx.com");
java.net.HttpURLConnection urlConnection = (java.net.HttpURLConnection) url.openConnection(java.net.Proxy.NO_PROXY);
}catch (Exception ex){
}
如果你使用的okhttp网络框架
OkHttpClient.Builder builder = new OkHttpClient.Builder();
// 设置连接使用的HTTP代理。该方法优先于proxySelector,默认代理为空,完全禁用代理使用NO_PROXY
builder.proxy(Proxy.NO_PROXY);
OkHttpClient okHttpClient = builder.build();