我已经让它以某种方式工作,但只有获取请求才会有自定义标头.正如jbelkins在Gabriel Cartiers对你的问题的评论中回答的那样,你将不得不操纵请求并重新加载它.
我已经让它为GET-Requests工作了:
(这是在xamarin 0> c#,但我想你会得到这个想法)
我创建了一个私人领域
private bool _headerIsSet
Run Code Online (Sandbox Code Playgroud)
我在每次在deligate方法中发出请求时检查:
[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);
}
}
Run Code Online (Sandbox Code Playgroud)
正如我所说,这仅适用于GET -Requests.不知何故,POST -Requests 不包含原始请求的正文数据(request.Body和request.BodyStream为null),因此muteableRequest(它是原始请求的可静态副本)将不包含正文数据原始请求.
我希望这会帮助你或其他人解决同样的问题.
编辑:根据您的需要,将"Accept-Language"设置为关键
小智 5
只需在 URL 请求中设置所需的语言ISO 639-1代码,如下所示,以便我们可以从服务器端获取用户首选或区域设置语言响应。
var request = URLRequest(url: URL(string: "YourUrlStr"))
request.setValue("en", forHTTPHeaderField: "Accept-Language")
wkWebView.load(request)
Run Code Online (Sandbox Code Playgroud)
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:YourUrlStr]];
[request setValue:@"en" forHTTPHeaderField:@"Accept-Language"];
[wkWebView loadRequest:urlRequest];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7296 次 |
| 最近记录: |