在 iOS WKWebView 中保留“Referer"标头? [英] Persist “Referer” header in iOS WKWebView?

查看:72
本文介绍了在 iOS WKWebView 中保留“Referer"标头?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在 WKWebView 中传递自定义标头.但是在重定向标题中会更新为新标题.例如,我输入了MyName";在浏览器中,它将打开搜索结果,现在打印语句 Referer 已更改为Referer":https://www.google.com/";如何在重定向中保留自定义标头.

I am passing custom headers in WKWebView. But on redirection Headers get updated with new ones. for example i have typed "MyName" in browser it will open search results now the on print statement Referer has changed "Referer": "https://www.google.com/" How to persist custom headers across the redirections.

WKWebView 中,decidePolicyFor navigationAction: WKNavigationAction 函数头在重定向时更新.

In WKWebView, decidePolicyFor navigationAction: WKNavigationAction function headers get updated on redirection.

navigationAction.request.setValue("/App/app/iOS", forHTTPHeaderField: "Referer") 不行

import WebKit

class WKWEBViewController: UIViewController, WKNavigationDelegate {
    
    private var wkWebView: WKWebView!
    var loadURLString = "https://www.google.com"
    
    var customHeaders:[String:String] = ["Referer":"/AppleApp/app/iOS"]
    
    override func viewDidLoad() {
    }
    
    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(true)
        loadURL()
    }
    
    private func loadURL() {
        let config = WKWebViewConfiguration()
        wkWebView = WKWebView(frame: UIScreen.main.bounds, configuration: config)
        wkWebView.navigationDelegate = self
        wkWebView.backgroundColor = .white
        wkWebView.scrollView.backgroundColor = .white
        view.backgroundColor = .white
        view.addSubview(wkWebView)
        
        if let pdfurl = URL(string: loadURLString) {
            var urlRequest = URLRequest(url: pdfurl)
            if customHeaders.count != 0 {
                for obj in customHeaders {
                    urlRequest.addValue(obj.value, forHTTPHeaderField: obj.key)
                }
            }
            wkWebView.load(urlRequest)
        }
    }
}

extension WKWEBViewController {
    
    func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
        let request = navigationAction.request
        print("URl--->", request.url)
        if let headers = request.allHTTPHeaderFields {
            print("Headers: \(headers)")
        } else {
            print("Nope, sir")
        }
        decisionHandler(.allow)
    }
}

推荐答案

喜欢以下内容吗?

import UIKit
import WebKit

class ViewController: UIViewController, WKNavigationDelegate {
    // MARK: - IBOutlet
    @IBOutlet weak var webView: WKWebView!
    
    
    // MARK: - Life cycle
    override func viewDidLoad() {
        super.viewDidLoad()
        webView.navigationDelegate = self
    }
    
    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        
        let urlStr = "https://www.google.com/"
        if let url = URL(string: urlStr) {
            let request = URLRequest(url: url)
            webView.load(request)
        }
    }
    
    func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
        var request = navigationAction.request
        if let host = navigationAction.request.url?.host {
            if host == "www.google.com" {
                request.setValue("https://www.google.com/", forHTTPHeaderField: "Referer")
                if let headers = request.allHTTPHeaderFields {
                    print("Google Headers: \(headers)")
                }
            }
        }
        decisionHandler(.allow)
    }
}

结果如下

Google 标头:[Referer":https://www.google.com/"、User-Agent":"Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 就像 Mac OS X)AppleWebKit/605.1.15 (KHTML, like Gecko)",接受":text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8"]

Google Headers: ["Referer": "https://www.google.com/", "User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko)", "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8"]

这篇关于在 iOS WKWebView 中保留“Referer"标头?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆