android - 为什么我的 Android WebView 显示 403 禁止错误

标签 android kotlin android-webview http-status-code-403

我在让我的 WebView 正常工作时遇到一些问题

webview 应该显示这个 url https://mcdonalds.de/deinfeedback ,但每当我尝试加载它时,我的 onReceivedHttpError 方法都会返回一个

403 Forbidden

错误。它适用于其他网址,例如 https://www.google.com ,但我似乎无法让它适用于此。起初我认为这与 ssl 证书有关,但是我的 WebViewClient 的 onReceiveSslError 从未被调用。然后,我尝试将我的用户代理字符串更改为我在移动浏览器上的相同字符串,但它仍然返回相同的 403 错误

这是我的 onCreate 中处理 WebView 的部分

webViewDisplay.settings.builtInZoomControls = true
webViewDisplay.settings.displayZoomControls = false
webViewDisplay.settings.domStorageEnabled   = true
webViewDisplay.settings.javaScriptEnabled = true
webViewDisplay.settings.javaScriptCanOpenWindowsAutomatically = true
webViewDisplay.webViewClient = MyWebClient()

webViewDisplay.loadUrl(resources.getString(R.string.web_activation_url_main)) //https://www.mcdonalds.de/deinfeedback

这是我的 WebViewClient

inner class MyWebClient : WebViewClient() {

        override fun shouldOverrideUrlLoading(view: WebView?, request: WebResourceRequest): Boolean {
            Log.v(TAG, "Overriding Url to ${request.url.toString()}")
            return false //continues loading
        }


        override fun onReceivedSslError(view: WebView?, handler: SslErrorHandler, error: SslError?) {
            Log.v(TAG, "Ssl Error")
            handler.proceed()  //handle error
        }


        override fun onReceivedHttpError(view: WebView?, request: WebResourceRequest?, errorResponse: WebResourceResponse) {
            Log.v(TAG, "Http Error   ${errorResponse.statusCode} ${errorResponse.reasonPhrase}")
            super.onReceivedHttpError(view, request, errorResponse)
        }

    }

我希望有人能帮我解决这个问题


编辑:

403 错误不是问题所在。我已将布局的高度设置为 wrap_content ,这使得 webView 在某些网站上自行包裹。将其更改为 match_parent 修复了该问题。 这归功于Dani

最佳答案

您确定这只是 WebView 问题吗?在桌面浏览器中执行此 url 会出现 403 - 并且看到的内容与我在 android 的 WebView 中看到的内容完全相同。换句话说,如果您看到同样的情况,我认为您可以放心地忽略该错误。如果您看到其他内容,请附上快照。

enter image description here

编辑:现在很确定。

添加:

 @RequiresApi(Build.VERSION_CODES.LOLLIPOP)
        override fun onReceivedHttpError(view: WebView?, request: WebResourceRequest?, errorResponse: WebResourceResponse) {
            Log.v("APP", "Http Error ${request?.url}   ${errorResponse.responseHeaders} ${errorResponse.reasonPhrase}")
            super.onReceivedHttpError(view, request, errorResponse)
        }

产生这个: HTTP 错误 https://s3-eu-west-1.amazonaws.com/automation.isc-mcd.svy.do--voc/public/de/.json {Transfer-Encoding=chunked、Server=AmazonS3、Access-Control-Allow-Origin=*、Access-Control-Allow-Methods=GET、Vary=Origin、Access-Control-Request-Headers 、访问控制请求方法、x-amz-request-id=AC63B0D940D45EDA、访问控制最大年龄=3000、x-amz-id-2=7LKt0WZsaKdyYTQhN5cSmGSdUZMBR+D8mEaAOovorrV5jNJcS0CvNFb08K7QqnTkn4C73MfMWJI= ,日期 = 星期五,2020 年 1 月 3 日 03 :17:05 GMT,Content-Type=application/xml} 禁止

请注意,这与在桌面浏览器中导致“禁止”的请求完全相同。无有害副作用,可以忽略。

关于android - 为什么我的 Android WebView 显示 403 禁止错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59571361/

相关文章:

java - 无法解决R无法解析为变量的问题

java - Android Studio 没有安装向导

android - 在 Android 的 Gallery 中模仿 iOS 的 "rubber band"效果

android - 如何在 AndroidX 中更改 Android SearchView 的 textcolor 或 queryhint textcolor?

gradle - 如何从Kotlin DSL中的gradle任务设置systemProperty?

class - Kotlin 中的调用构造函数引用

android - 当我的 Activity 不可见时,如何在 Android WebView 中暂停 Flash 内容?

Android View 未接收到触摸

使用 Firebase 的 Android 通知

java - 无法在 webview 中加载 url - 黑屏