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

Why is my Android WebView showing me an 403 Forbidden Error

我在让我的网络视图正常工作时遇到了一些问题

网络视图应该显示这个 url https://mcdonalds.de/deinfeedback ,但是每当我尝试加载它时我的 onReceivedHttpError 方法 returns 我

403 Forbidden

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

这是我处理 WebView 的 onCreate 部分

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 中看到的完全相同的内容。换句话说,如果您看到相同的内容,我认为您可以安全地忽略该错误。如果您看到其他内容,请附上快照。

编辑:现在很确定了。

添加:

 @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,Access-Control-Request-Method,x-amz-request-id=AC63B0D940D45EDA,Access-Control-Max-Age=3000,x- amz-id-2=7LKt0WZsaKdyYTQhN5cSmGSdUZMBR+D8mEaAOovorrV5jNJcS0CvNFb08K7QqnTkn4C73MfMWJI=,日期=2020 年 1 月 3 日星期五 03:17:05 GMT,内容类型=application/xml} 禁止

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