如何将自定义HTTP标头设置为WKWebView发出的请求

我已经构建了一个包含WKWebView的应用程序,并且Web视图加载的网站支持多种语言。 我如何在WKWebView或其他HTTP头文件中更改Accept-Language头文件?


我以某种方式工作,但只有获取请求才会有自定义标题。 正如jbelkins在Gabriel Cartiers的链接中回答你的问题所述,你将不得不操纵请求并重新加载它。

我有这样的GET请求工作:

(它在xamarin 0> c#中,但我认为你会明白)

我创建了一个私人领域

private bool _headerIsSet

我每次在解析方法中发出请求时都会检查它:

[Foundation.Export("webView:decidePolicyForNavigationAction:decisionHandler:")]
    public void DecidePolicy(WKWebView webView, WKNavigationAction navigationAction, Action<WKNavigationActionPolicy> decisionHandler)
    {
        var request = navigationAction.Request;
        // check if the header is set and if not, create a muteable copy of the original request
        if (!_headerIsSet && request is NSMuteableUrlRequest muteableRequest);              
        {
            // define your custom header name and value
            var keys = new object[] {headerKeyString};
            var values = new object[] {headerValueString};
            var headerDict = NSDictionary.FromObjectsAndKeys(values, keys);
            // set the headers of the new request to the created dict
            muteableRequest.Headers = headerDict;
            _headerIsSet = true;
            // attempt to load the newly created request
            webView.LoadRequest(muteableRequest);
            // abort the old one
            decisionHandler(WKNavigationActionPolicy.Cancel);
            // exit this whole method
            return;
        }
        else
        {
            _headerIsSet = false;                
            decisionHandler(WKNavigationActionPolicy.Allow);
        }
    }

正如我所说,这只适用于GET请求。 不知何故,POST请求不包含原始请求的正文数据 (request.Body和request.BodyStream为空),所以muteableRequest(它是原始请求的一个可变拷贝)将不包含正文数据原始请求。

我希望这会帮助你或者其他解决同样问题的人。

编辑:为了您的需要,请将“Accept-Language”设置为关键字

链接地址: http://www.djcxy.com/p/91527.html

上一篇: How to set custom HTTP headers to requests made by a WKWebView

下一篇: Textarea placeholder isn't shown in IE 11 being rendered using React