广告
返回顶部
首页 > 资讯 > 移动开发 >Android webview拦截请求,实现跨域处理
  • 692
分享到

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

androidokhttpwebview跨域请求 2023-09-20 15:09:40 692人浏览 泡泡鱼
摘要

重写WEBViewClient 的 shouldInterceptRequest(),拦截请求,实现特殊处理(跨域处理)。 例如:拦截旧的url,替换域名,替换参数等,然后使用新url重新发起请求。

重写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)    }

组装WebResourceResponse:

    @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()        }    }

网络请求–Get:

    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)    }

来源地址:https://blog.csdn.net/zhijiandedaima/article/details/127903455

--结束END--

本文标题: Android webview拦截请求,实现跨域处理

本文链接: https://www.lsjlt.com/news/413029.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Android webview拦截请求,实现跨域处理
    重写WebViewClient 的 shouldInterceptRequest(),拦截请求,实现特殊处理(跨域处理)。 例如:拦截旧的url,替换域名,替换参数等,然后使用新url重新发起请求。 ...
    99+
    2023-09-20
    android okhttp webview 跨域请求
  • 使用Filter拦截器如何实现请求跨域转发
    目录Filter拦截器实现请求跨域转发在使用Filter实现转发后特做一次记录使用filter解决跨域在web.xml配置拦截器过滤器代码Filter拦截器实现请求跨域转发 因为公司...
    99+
    2022-11-12
  • Angular怎么实现错误处理和请求拦截
    本篇内容主要讲解“Angular怎么实现错误处理和请求拦截”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Angular怎么实现错误处理和请求拦截”吧!基本使用用 Angular 提供的 Http...
    99+
    2023-07-04
  • Android WebView通过动态的修改js去拦截post请求参数实例
    需求背景: 需要在用户点击提交按钮的时候拦截用户提交的数据。 遇到的问题: 1.页面不是自家前端做的,不能修改网页中的代码 2.要拦截的请求不是get请求,而是一个post请求...
    99+
    2022-06-06
    参数 post请求 webview 动态 js post Android
  • Spring实现处理跨域请求代码详解
    一次正常的请求最近别人需要调用我们系统的某一个功能,对方希望提供一个api让其能够更新数据。由于该同学是客户端开发,于是有了类似以下代码。@RequestMapping(method = RequestMethod.POST, value ...
    99+
    2023-05-30
    spring 跨域请求 处理跨域
  • ajax如何实现前台后台跨域请求处理
    这篇文章主要为大家展示了“ajax如何实现前台后台跨域请求处理”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“ajax如何实现前台后台跨域请求处理”这篇文章吧。跨...
    99+
    2022-10-19
  • vue-cli项目开发/生产环境代理如何实现跨域请求
    这篇文章主要介绍了vue-cli项目开发/生产环境代理如何实现跨域请求,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。开发环境中跨域使用vue...
    99+
    2022-10-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作