Android webview拦截请求,实现跨域处理

这篇具有很好参考价值的文章主要介绍了Android webview拦截请求,实现跨域处理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、重写WebViewClient 的 shouldInterceptRequest(),拦截请求,实现特殊处理(跨域处理)。

例如:拦截旧的url,替换域名,替换参数等,然后使用新url重新发起请求。

    @RequiresApi(Build.VERSION_CODES.LOLLIPOP)
    override fun shouldInterceptRequest(
        view: WebView,
        request: WebResourceRequest
    ): WebResourceResponse? {
        request.url.toString().let {
        // 判断该请求是否需要拦截处理
            if (it.contains("xxx")) {
                return assembleResponse(view, request)
            }
        }
        //此处代表拦截器不处理该请求,直接原路请求器处理
        return super.shouldInterceptRequest(view, request)
    }

2、组装WebResourceResponse:

/**
     * 手动组装response
     */
    @RequiresApi(Build.VERSION_CODES.LOLLIPOP)
    private fun assembleResponse(
        view: WebView,
        request: WebResourceRequest
    ): WebResourceResponse? {
        try {
            val originUrl = request.url.toString()
            val realUrl = getRealUrl(originUrl)
            // val headers = request.requestHeaders
            val response = doGet(realPath, null).execute()
            
            if (response.isSuccessful && response.code() == 200) {
                return response.body()?.run {
                     WebResourceResponse(
				         response.header("Content-Type"),
				         response.header("Content-Encoding"),
				         response.body()?.byteStream()
				     )
                }
            }
        } catch (e: Exception) {
            e.printStackTrace()
        }
    }

3、网络请求–Get:文章来源地址https://www.toymoban.com/news/detail-551912.html

    private fun addHeader(builder: Request.Builder, headers: JSONObject?) {
        if (headers != null) {
            val keys = headers.keys()
            while (keys.hasNext()) {
                val key = keys.next()
                val value = headers.optString(key, "")
                builder.addHeader(key, value)
            }
        }
    }

    fun doGet(url: String?, headers: JSONObject?): Call? {
        var client: OkHttpClient? = null
        val trustManager = HttpUtils.getX509TrustManager()
        val okhttpBuilder = OkHttpClient.Builder()
            .connectTimeout(10, TimeUnit.SECONDS)
            .readTimeout(60, TimeUnit.SECONDS)
            .writeTimeout(60, TimeUnit.SECONDS) // okhttp 已经有RetryAndFollowUpInterceptor
            .hostnameVerifier(HttpUtils.TrustAllHostnameVerifier())
            .addNetworkInterceptor(RemoveDirtyConnIntercepter())
            .sslSocketFactory(SSLSocketFactoryCompat(trustManager), trustManager)
        client = okhttpBuilder.build()

        val builder = Request.Builder().url(url)
        addHeader(builder, headers)
        val request = builder.get()
            .build()
        return client.newCall(request)
    }

到了这里,关于Android webview拦截请求,实现跨域处理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Android WebView如何实现网页的刷新

    Android WebView如何实现网页的刷新 一、引言 在Android应用开发中,我们经常需要将网页嵌入到应用中展示,这时就可以使用Android提供的WebView组件。而在展示网页的过程中,有时候需要实现刷新网页的功能。本文将介绍如何使用WebView来实现网页的刷新,并提供相应的源代码示例

    2024年02月04日
    浏览(47)
  • Android 使用webView打开网页可以实现自动播放音频

    使用webview 自动播放音视频,场景如,流媒体自动部分,音视频通话等。会出现如下问题:   解决方案如下: 配置webview 如下,这样可以自动播放音频。

    2024年02月12日
    浏览(65)
  • 掌握Spring MVC拦截器整合技巧,实现灵活的请求处理与权限控制!

    (1)浏览器发送一个请求会先到Tomcat的web服务器。 (2)Tomcat服务器接收到请求以后,会去判断请求的是静态资源还是动态资源。 (3)如果是静态资源,会直接到Tomcat的项目部署目录下去直接访问。 (4)如果是动态资源,就需要交给项目的后台代码进行处理。 (5)在找到具体的方法之前

    2024年01月22日
    浏览(49)
  • Android WebView实现全屏播放视频的解决方案

    对于Android中的WebView控件,在某些情况下可能无法实现全屏播放视频的功能。这是因为WebView默认情况下不支持视频的全屏播放。然而,我们可以通过一些技术手段来解决这个问题。本文将介绍一种解决方案,并提供相应的源代码。 解决方案: 创建自定义的WebViewClient类 首先,

    2024年02月04日
    浏览(49)
  • Springboot+vue跨域+登录拦截问题,前端获取不到session,每次请求sessionid变化

    折磨了整整两天,终于把这个问题搞定了. 一开始后端开发完后,用apifox所有接口测试都是可以的,但当前端跑起来后发现接收不到后端的数据. 网上查了很多方法,首先试了查到的前端代理方法 没用,代理配置了但api不会替换成设置好的代理,还是以字符串形式到相对路径上. 于是找

    2024年01月19日
    浏览(35)
  • 【JoAPP】Android WebView与H5交互实现(JAVA+KOTLIN)

           最近一个应急平台的项目移动端开发,原计划用UNI-APP实现,客户想着要集成语音、视频通话功能,基于经验判断需要买一套IM原生移动端框架去结合H5整合比较合适,没想到最后客户不想采购,而且语音视频通话功能也迟迟未能完全确认,H5部分所开发的业务功能已经

    2024年02月03日
    浏览(46)
  • Taro+VantUI请求拦截处理

    请求拦截处理 备注: CONF.baseUrl 需要在config-index.js文件中进行配置 代码如下:

    2024年02月12日
    浏览(30)
  • Android WebView H5视频播放实现全屏播放功能、全屏按钮不显示、灰显、点击无效问题解决方案

    打开硬件加速(3.0以上版本支持) set一个WebChromClient,实现onShowCustomView() 方法和onHideCustomView()方法 全屏支持 打开硬件加速 在Manifest中,对应的Activity添加: android:hardwareAccelerated = “true”。 防止h5重新加载:Manifest中,对应的Activity添加: android:configChanges=“keyboardHidden|orientation|s

    2024年02月09日
    浏览(67)
  • Android设置app开机自启,网络监听,主线程完成UI渲染,HTTP网络请求工具,json数据处理,android使用sqlite,Android定时任务,日志打印

    在AndroidManifest.xml文件中添加权限 在AndroidManifest.xml文件中注册接收广播配置, 添加到manifest application节点下 在AndroidManifest.xml文件中添加节点属性, 指定安装目录为内部存储器, 而非SD卡 开机启动执行代码 gson是谷歌… implementation ‘gson-2.8.5’ 依赖无法下载, 直接使用jar包, 将ja

    2024年02月03日
    浏览(54)
  • Android实现网络请求方法

    ​ 安卓开发网络请求可谓是安卓开发的灵魂,如果你不会网络请求,那么你开发的应用软件就是一具没有灵魂的枯骨。 ​ 在安卓开发中进行网络请求和java中的网络请求有异曲同工之妙,但是安卓软件毕竟的安装在我们手机上的,而平常的应用软件下载后会要求你给与权限,

    2024年02月10日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包