作者:愛生活愛Android
連結:https://www.jianshu.com/p/02a2167b3c8d
需求來源
在公司工作過程中,有時領導會拿競爭對手的APK讓我抓包,看看別人的介面請求和傳回結果,然後分析這些資料在公司後期產品開發中是否有用。如果我們公司有這種想法,那麼我們公司競爭對手肯定也有這種想法,那麼如何避免他人拿我們公司APK去抓包呢?下麵我就來說下自己的想法。
原理分析
平時都是用Fiddler對Android應用進行抓包,如果對Fiddler不熟悉,可以點選檢視Fiddler抓包方法https://jingyan.baidu.com/article/03b2f78c7b6bb05ea237aed2.html。在抓抱前,需要將手機的WiFi進行代理設定,然後才能在電腦上使用Fiddler成功抓包,那麼我們試想一下,如果在APP請求網路之前先判斷下手機網路是否使用了代理,如果使用了代理就不請求介面。新的問題來了,在Android手機中如何知道手機網路是否使用了代理?
程式碼實踐
經過查詢資料與實踐,發現如下的程式碼能夠滿足需求:
private 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(this);
proxyPort = android.net.Proxy.getPort(this);
}
return (!TextUtils.isEmpty(proxyAddress)) && (proxyPort != -1);
}
不足之處
這裡只要判斷使用了代理,就停止請求介面,這也是有些不足的地方,比如使用者使用了一個國外的代理,她使用該代理是用來訪問國外網站的,非常合理。就應為她加入了代理,導致不能使用我們的APP,這就使得使用者體驗比較差。
總結
這個總結不好下啊,因為公司考慮到使用者體驗,最終沒使用這個方法,所以只是個研究性的辦法。後期如果使用上了,在來補充這個總結。
●編號366,輸入編號直達本文
●輸入m獲取到文章目錄
Java程式設計
更多推薦《18個技術類公眾微信》
涵蓋:程式人生、演演算法與資料結構、駭客技術與網路安全、大資料技術、前端開發、Java、Python、Web開發、安卓開發、iOS開發、C/C++、.NET、Linux、資料庫、運維等。