如何将自定义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