iOS如何为每个UIWebView请求添加cookie?

Bad*_*per 9 cookies uiwebview ios swift

我需要使用Angular打开URL,UIWebView我需要为每个UIWebView请求发送cookie .

我试图做的:

我试图检查请求是否包含cookie.如果它确实UIWebView执行请求,如果不是,我创建相同的请求,但使用cookie并执行它.用我用UIWebViewDelegate的方法替换请求func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebViewNavigationType) -> Bool.但它不像我预期的那样工作,有些请求没有cookie.

我的代码:

final class FieldServiceViewController: UIViewController {

    private var webView = UIWebView()
    private var sessionID = String()

    override func viewDidLoad() {
        super.viewDidLoad()

        _ = JSONAPI.getSessionID().subscribe(onNext: { [weak self] sessionID in
            self?.sessionID = sessionID
            self?.configureUI()
            let string = "https://someURL"
            let url = URL(string: string)
            let request = URLRequest(url: url!)
            self?.webView.loadRequest(request)
        })
    }

    override func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()
        webView.frame = view.bounds
    }

    private func configureUI() {
        webView.delegate = self
        view.addSubview(webView)
    }

    private func cookedRequest(from: URLRequest) -> URLRequest? {

        let cookiesKey = "Cookie"
        let headers = from.allHTTPHeaderFields ?? [:]
        if (headers.contains { $0.0 == cookiesKey }) {
            return nil
        }

        var request = from
        request.cachePolicy = .reloadIgnoringLocalAndRemoteCacheData
        let cookiesToAdd = "SESSIONID=\(sessionID)"
        request.addValue(cookiesToAdd, forHTTPHeaderField: cookiesKey)
        return request
        }
    }

    extension FieldServiceViewController: UIWebViewDelegate {

    func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebViewNavigationType) -> Bool {

        if let cooked = cookedRequest(from: request) {
            webView.loadRequest(cooked)
            return false
        }

        return true
    }
}
Run Code Online (Sandbox Code Playgroud)

如何为每个UIWebView请求添加cookie?

PS我也保存了cookie HTTPCookieStorage,但看起来根本没有连接UIWebView请求和共享存储之间的连接.

Bad*_*per 1

感谢您的帮助。通过创建具有特定域的 cookie 解决了问题:

final class FieldServiceViewController: UIViewController, DLHasHomeTitleView {

    private let fieldServiceEndPoint = Bundle.main.object(forInfoDictionaryKey: "FIELD_SERVICE_ENDPOINT") as! String

    private var webView = UIWebView()
    private var sessionID = String()

    override func viewDidLoad() {
        super.viewDidLoad()

        configureUI()

        _ = JSONAPI.getSessionID().subscribe(onNext: { [weak self] sessionID in
            guard let `self` = self else { return }

            self.sessionID = sessionID

            let urlString = "https://\(self.fieldServiceEndPoint)"
            let url = URL(string: urlString)
            let request = URLRequest(url: url!)

            let cookie = HTTPCookie(properties: [
                .name: "JSESSIONID",
                .value: sessionID,
                .path: "/",
                .domain: self.fieldServiceEndPoint])
            HTTPCookieStorage.shared.setCookie(cookie!)

            self.webView.loadRequest(request)
        })
    }
Run Code Online (Sandbox Code Playgroud)