拦截请求并在WKWebView中添加参数

时间:2017-12-18 08:43:44

标签: objective-c wkwebview

我尝试拦截请求并根据以下代码添加请求参数

- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler {
NSURL * actionURL = navigationAction.request.URL;
if ([actionURL.host isEqualToString:kMyHost]) {
    NSString * headerField = @"Authorization";
    NSString * headerValue = [NSString stringWithFormat:@"Bearer %@", accessToken];
    if ([[navigationAction.request valueForHTTPHeaderField:headerField] isEqualToString:headerValue]) {
        decisionHandler(WKNavigationActionPolicyAllow);
    } else {
        NSMutableURLRequest * newRequest = [navigationAction.request mutableCopy];
        [newRequest setValue:headerValue forHTTPHeaderField:headerField];
        NSMutableString *params = [[NSMutableString alloc] initWithData:[newRequest HTTPBody] encoding:NSUTF8StringEncoding];
        [params appendFormat:@"is_app_web_view=1&utm_source=ios"];
        [newRequest setHTTPBody:[[self encodeToPercentEscapeString:params] dataUsingEncoding:NSUTF8StringEncoding]];
        decisionHandler(WKNavigationActionPolicyCancel);
        [webView loadRequest:newRequest];
    }
} else {
    decisionHandler(WKNavigationActionPolicyAllow);
}
}  

我发现只设置http标头有效,但是一旦我添加了以下代码行,就不会发送请求:

        NSMutableString *params = [[NSMutableString alloc] initWithData:[newRequest HTTPBody] encoding:NSUTF8StringEncoding];
        [params appendFormat:@"is_app_web_view=1&utm_source=ios"];
        [newRequest setHTTPBody:[[self encodeToPercentEscapeString:params] dataUsingEncoding:NSUTF8StringEncoding]];    

这是添加参数的正确方法吗?有人能指出我正确的方向吗?

0 个答案:

没有答案