日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

在Android環境下WebView中攔截所有請求并替換URL示例詳解

瀏覽:39日期:2022-09-23 11:14:03

需求背景

接到這樣一個需求,需要在 WebView 的所有網絡請求中,在請求的url中,加上一個xxx=1的標志位。

例如 http://www.baidu.com 加上標志位就變成了 http://www.baidu.com?xxx=1

尋找解決方案

從 Android API 11 (3.0) 開始,WebView 開始在 WebViewClient 內提供了這樣一條 API ,如下:

public WebResourceResponse shouldInterceptRequest(WebView view, String url)

就是說只要實現 WebViewClient 的 shouldInterceptRequest 方法,然后調用 WebView 的setWebViewClient 就可以了。

但是,在 API21 以上又棄用了上述 API,使用了一條新的 API,如下:

public WebResourceResponse shouldInterceptRequest(WebView view, final WebResourceRequest request)

好吧,為了支持盡量多的版本,看來兩個都需要實現了,發現一看就非常好用的 String url 變成了一個WebResourceRequest request。WebResourceRequest 這個東西是一個接口,并且是這樣定義的:

public interface WebResourceRequest { Uri getUrl(); boolean isForMainFrame(); boolean hasGesture(); String getMethod(); Map<String, String> getRequestHeaders();}

在其中沒有發現任何可以直接替換請求的方法。

然后搜索了一下 Android 代碼中對他的引用,點我搜索。然后發現 private static class WebResourceRequestImpl implements WebResourceRequest 它的內部實現僅僅是一個單純的實體。那這個東西要替換就非常好辦了,三個方法都可以做:

動態代理 反射 重新實現

實現

方案確定了,剩下的就簡單了。直接上代碼。

首先是往URL字符串加那個標志位的方法

public static String injectIsParams(String url) { if (url != null && !url.contains('xxx=') { if (url.contains('?')) { return url + '&xxx=1'; } else { return url + '?xxx=1'; } } else { return url; }}

然后要攔截所有請求了

webView.setWebViewClient(new WebViewClient() { @SuppressLint('NewApi') @Override public WebResourceResponse shouldInterceptRequest(WebView view, final WebResourceRequest request) { if (request != null && request.getUrl() != null) { String scheme = request.getUrl().getScheme().trim(); if (scheme.equalsIgnoreCase('http') || scheme.equalsIgnoreCase('https')) { return super.shouldInterceptRequest(view, new WebResourceRequest() { @Override public Uri getUrl() { return Uri.parse(injectIsParams(request.getUrl().toString())); } @SuppressLint('NewApi') @Override public boolean isForMainFrame() { return request.isForMainFrame(); } @SuppressLint('NewApi') @Override public boolean hasGesture() { return request.hasGesture(); } @SuppressLint('NewApi') @Override public String getMethod() { return request.getMethod(); } @SuppressLint('NewApi') @Override public Map<String, String> getRequestHeaders() { return request.getRequestHeaders(); } }); } } return super.shouldInterceptRequest(view, request); } @Override public WebResourceResponse shouldInterceptRequest(WebView view, String url) { if (!TextUtils.isEmpty(url) && Uri.parse(url).getScheme() != null) { String scheme = Uri.parse(url).getScheme().trim(); if (scheme.equalsIgnoreCase('http') || scheme.equalsIgnoreCase('https')) { return super.shouldInterceptRequest(view, injectIsParams(url)); } } return super.shouldInterceptRequest(view, url); } });

大功告成。

歡迎指出代碼中的問題~~一起學習進步

注意: 注意保護 URL 的 Scheme,在代碼中特地過濾了 http 和 https。

引申

上邊的 API 中發現還能有更多的玩法,比如:

替換 WebResourceResponse,構造一個自己的 WebResourceResponse。比如下列代碼,用一個包里的本地文件替換掉要請求的網絡圖片。

WebResourceResponse response = null; if (url.contains('logo')) { try { InputStream is = getAssets().open('test.png'); response = new WebResourceResponse('image/png', 'UTF-8', is); } catch (IOException e) { e.printStackTrace(); } }return response;

在 API 21 (5.0) 以上的版本使用了 WebResourceRequest 接口,這個接口能修改發出請求的 Header

@Overridepublic Map<String, String> getRequestHeaders() { return request.getRequestHeaders();}

在 API 21 (5.0) 以上的版本中可以區分 GET 請求和 POST 請求,在某些情況下,需要區分 AJAX 的不同種類請求的時候可以用到。

到此這篇關于在Android環境下WebView中攔截所有請求并替換URL示例詳解的文章就介紹到這了,更多相關Android WebView攔截所有請求并替換URL內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Android
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
精品视频自拍| 欧美美女一区| 日韩国产在线不卡视频| 日韩中文字幕1| 久久av一区| 色婷婷精品视频| 成人片免费看| 欧美色图一区| 先锋亚洲精品| 亚洲乱码久久| 91综合久久爱com| 国产精品一区二区av交换| 国产精品亚洲综合久久| 国产精品毛片视频| 高清一区二区三区av| 九九精品调教| 午夜久久美女| 亚洲欧洲美洲国产香蕉| 日韩专区视频网站| 91精品福利观看| 国产欧美日韩综合一区在线播放| 国产精品成人**免费视频| 久久精品一区| 久久精品观看| 蜜桃久久久久久| 国产日韩欧美高清免费| 国产精品久久免费视频| 成人国产精品久久| 亚洲天堂久久| 综合激情五月婷婷| 国产激情久久| www.九色在线| 在线日韩av| 日韩中文字幕| 日韩精品专区| 香蕉久久99| 婷婷综合国产| 精品五月天堂| 日韩午夜在线| 久久福利在线| 欧美日韩国产一区二区三区不卡| 亚洲专区一区| 久久不见久久见中文字幕免费| 精品国产免费人成网站| 亚洲精品中文字幕乱码| 日本久久二区| 国产传媒av在线| 日韩中文字幕不卡| 精品一区电影| 亚洲深夜福利| 日韩av午夜在线观看| 亚洲三级欧美| 石原莉奈在线亚洲三区| 久久不见久久见免费视频7| 日本久久黄色| 日韩精品一二三区| 国产福利一区二区精品秒拍 | 国产欧美一区二区三区米奇| 欧美日韩在线观看视频小说| 日韩av一级片| 国产精品久久观看| 亚洲欧美综合| 国产精品一站二站| 国产另类在线| 国产a亚洲精品| 水蜜桃久久夜色精品一区的特点 | 激情欧美丁香| 国产精品成人**免费视频| 午夜影院欧美| 粉嫩av一区二区三区四区五区 | 在线综合亚洲| 成人日韩av| 亚洲精品一级二级三级| 日韩精品欧美| 国产日产一区| 香蕉久久99| 国产一区不卡| 日韩高清三区| 红桃视频亚洲| 国产一区二区三区天码| 亚洲人成精品久久久| 偷拍精品精品一区二区三区| 国产精品欧美大片| 日韩中文字幕不卡| 久久一区二区三区电影| 麻豆中文一区二区| 亚欧成人精品| 亚洲国产一区二区三区在线播放| 欧美激情日韩| 只有精品亚洲| 天堂√8在线中文| 国产精品对白| 日韩1区2区日韩1区2区| 亚洲欧美网站| 五月婷婷六月综合| 欧美片第1页| 欧美91在线|欧美| 91精品尤物| 亚洲伊人精品酒店| 在线视频日韩| аⅴ资源天堂资源库在线| 国产精品最新自拍| 日韩**一区毛片| 久久av一区| 国产精品美女| 欧美日韩尤物久久| 97人人精品| 国产成人调教视频在线观看| 亚洲精品激情| 最新国产精品久久久| 好看的av在线不卡观看| 亚洲成人不卡| 91av亚洲| 日韩不卡一区| 成人污污视频| 国产一区二区三区不卡av| 国产精品极品在线观看| 国产三级精品三级在线观看国产| 亚洲日韩中文字幕一区| 视频一区中文字幕| av一区二区高清| 欧美日韩在线观看视频小说| 999国产精品视频| 久久久久午夜电影| 欧美日韩一二三四| 五月天久久久| 99xxxx成人网| 中文精品在线| 亚洲一区二区三区久久久| 蜜臀久久久99精品久久久久久| 亚洲欧美日本国产专区一区| 丝袜美腿成人在线| 日本不卡视频一二三区| 欧美日韩精品一区二区三区视频| 啪啪亚洲精品| 日本欧美在线| 久久精品资源| 91视频一区| 免费福利视频一区二区三区| 久久久一二三| 欧美日韩国产亚洲一区| 最新日韩av| 自拍日韩欧美| 蜜臀精品一区二区三区在线观看 | 欧美成人高清| 伊人久久在线| 日韩在线综合| 精品一区三区| 国产免费成人| 亚洲欧洲专区| 国产精品极品| 国产超碰精品| 99riav1国产精品视频| 伊人精品久久| 国产精品亲子伦av一区二区三区| 国产在线观看91一区二区三区| a国产在线视频| 不卡中文一二三区| 亚洲欧美网站在线观看| 国产美女视频一区二区| 福利片在线一区二区| 国产美女高潮在线观看| 亚洲激情久久| 国产三级一区| 群体交乱之放荡娇妻一区二区| 日韩一区二区久久| 国产九九精品| 国内精品99| 97久久超碰| 日韩精品首页| 91国内精品| 99精品视频在线| 日韩和欧美一区二区三区| 精品国产精品久久一区免费式 | а√天堂8资源中文在线| 999精品色在线播放| 亚洲一级大片| 精品久久一区| 欧美日韩日本国产亚洲在线 | 亚洲影院天堂中文av色| 精品视频99| 中文亚洲欧美| 国产亚洲第一伦理第一区| 国产v日韩v欧美v| 中文字幕亚洲精品乱码| 久久一区亚洲| 亚洲天堂久久| 国产欧美日韩视频在线| 999久久久精品国产| 日韩成人午夜精品| caoporn视频在线| 亚洲资源在线| 91精品国产自产在线观看永久∴ | 久久香蕉精品| 日本激情一区| 日韩三级一区| 日韩一区二区三区免费播放| 亚洲精品乱码日韩| 久久精品一区二区不卡| 亚洲不卡视频|