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请求和共享存储之间的连接.
感谢您的帮助。通过创建具有特定域的 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)
| 归档时间: |
|
| 查看次数: |
3219 次 |
| 最近记录: |