|
@@ -1,26 +1,6 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
|
|
|
|
|
|
|
|
import Foundation
|
|
import Foundation
|
|
@@ -58,18 +38,12 @@ class WKCookieWebView : WKWebView {
|
|
self.syncCookiesInJS()
|
|
self.syncCookiesInJS()
|
|
if let data = data, let response = response {
|
|
if let data = data, let response = response {
|
|
let _ = self.webViewLoad(data: data, response: response)
|
|
let _ = self.webViewLoad(data: data, response: response)
|
|
- } else {
|
|
|
|
- self.syncCookies(newRequest, nil, { (cookieRequest) in
|
|
|
|
- let _ = super.load(cookieRequest)
|
|
|
|
- })
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}, failure: {
|
|
}, failure: {
|
|
|
|
|
|
DispatchQueue.main.async {
|
|
DispatchQueue.main.async {
|
|
- self.syncCookies(request, nil, { (newRequest) in
|
|
+ let _ = super.load(request)
|
|
- let _ = super.load(newRequest)
|
|
|
|
- })
|
|
|
|
}
|
|
}
|
|
})
|
|
})
|
|
|
|
|
|
@@ -84,26 +58,7 @@ class WKCookieWebView : WKWebView {
|
|
failure()
|
|
failure()
|
|
} else {
|
|
} else {
|
|
if let response = response as? HTTPURLResponse {
|
|
if let response = response as? HTTPURLResponse {
|
|
-
|
|
+ success(request, response, data)
|
|
- let code = response.statusCode
|
|
|
|
- if code == 200 {
|
|
|
|
-
|
|
|
|
- success(request, response, data)
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- } else if code >= 300 && code < 400 {
|
|
|
|
-
|
|
|
|
- guard let location = response.allHeaderFields["Location"] as? String, let redirectURL = URL(string: location) else {
|
|
|
|
- failure()
|
|
|
|
- return
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- let request = URLRequest(url: redirectURL, cachePolicy: .reloadIgnoringLocalAndRemoteCacheData, timeoutInterval: 5)
|
|
|
|
- success(request, nil, nil)
|
|
|
|
- */
|
|
|
|
- } else {
|
|
|
|
- success(request, response, data)
|
|
|
|
- }
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -123,36 +78,7 @@ class WKCookieWebView : WKWebView {
|
|
}
|
|
}
|
|
|
|
|
|
extension WKCookieWebView {
|
|
extension WKCookieWebView {
|
|
-
|
|
+
|
|
- private func syncCookies(_ request: URLRequest, _ task: URLSessionTask? = nil, _ completion: @escaping (URLRequest) -> Void) {
|
|
|
|
- var request = request
|
|
|
|
- var cookiesArray = [HTTPCookie]()
|
|
|
|
-
|
|
|
|
- if let task = task {
|
|
|
|
- HTTPCookieStorage.shared.getCookiesFor(task, completionHandler: { (cookies) in
|
|
|
|
- if let cookies = cookies {
|
|
|
|
- cookiesArray.append(contentsOf: cookies)
|
|
|
|
-
|
|
|
|
- let cookieDict = HTTPCookie.requestHeaderFields(with: cookiesArray)
|
|
|
|
- if let cookieStr = cookieDict["Cookie"] {
|
|
|
|
- request.addValue(cookieStr, forHTTPHeaderField: "Cookie")
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- completion(request)
|
|
|
|
- })
|
|
|
|
- } else if let url = request.url {
|
|
|
|
- if let cookies = HTTPCookieStorage.shared.cookies(for: url) {
|
|
|
|
- cookiesArray.append(contentsOf: cookies)
|
|
|
|
- }
|
|
|
|
- let cookieDict = HTTPCookie.requestHeaderFields(with: cookiesArray)
|
|
|
|
- if let cookieStr = cookieDict["Cookie"] {
|
|
|
|
- request.addValue(cookieStr, forHTTPHeaderField: "Cookie")
|
|
|
|
- }
|
|
|
|
- completion(request)
|
|
|
|
-
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
|
|
|
|
private func syncCookiesInJS(for request: URLRequest? = nil) {
|
|
private func syncCookiesInJS(for request: URLRequest? = nil) {
|
|
if let url = request?.url,
|
|
if let url = request?.url,
|
|
@@ -191,9 +117,6 @@ extension WKCookieWebView {
|
|
extension WKCookieWebView : URLSessionTaskDelegate {
|
|
extension WKCookieWebView : URLSessionTaskDelegate {
|
|
|
|
|
|
func urlSession(_ session: URLSession, task: URLSessionTask, willPerformHTTPRedirection response: HTTPURLResponse, newRequest request: URLRequest, completionHandler: @escaping (URLRequest?) -> Void) {
|
|
func urlSession(_ session: URLSession, task: URLSessionTask, willPerformHTTPRedirection response: HTTPURLResponse, newRequest request: URLRequest, completionHandler: @escaping (URLRequest?) -> Void) {
|
|
-
|
|
+ completionHandler(request)
|
|
- syncCookies(request) { (newRequest) in
|
|
|
|
- completionHandler(newRequest)
|
|
|
|
- }
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|