Lorsque session
est défini comme .init(configuration:..., delegate:self, delegateQueue:NSOperationQueue.mainQueue())
pour la redirection du serveur proxy, NSURLSessionDataTask.resume()
n'aboutit pas à l'exécution de task
. Lorsque session
est défini comme .sharedSession()
, task
s'exécute comme prévu.Swift 2 nil NSURLSessionDataTask lors de l'ajout de la configuration
** kCFStreamPropertyHTTPProxyHost
etc. ont été dépréciées. Peut-être que cela affecte NSURLSessionConfiguration
d'une manière qui empêche l'exécution de task
?
class ConnectionManager: NSURLSession, NSURLSessionDelegate {
.
.
.
if shouldUseProxy {
let proxyEnable = NSNumber(int: 1) as CFNumber
let proxyDict: [NSObject:AnyObject] = [
kCFNetworkProxiesHTTPEnable: proxyEnable,
kCFStreamPropertyHTTPProxyHost: proxyHost,
kCFStreamPropertyHTTPProxyPort: proxyPort,
kCFStreamPropertyHTTPSProxyHost: proxyHost,
kCFStreamPropertyHTTPSProxyPort: proxyPort,
kCFProxyTypeKey: kCFProxyTypeHTTPS,
kCFProxyUsernameKey: proxyUser,
kCFProxyPasswordKey: proxyPW
]
let config = NSURLSessionConfiguration.ephemeralSessionConfiguration()
config.connectionProxyDictionary = proxyDict
self.session = NSURLSession.init(configuration: config, delegate: self, delegateQueue: NSOperationQueue.mainQueue())
} else {
self.session = NSURLSession.sharedSession()
}
self.task = self.session.dataTaskWithRequest(request) {
(data, response, error) in
if error == nil {
self.cookies = NSHTTPCookieStorage.sharedHTTPCookieStorage().cookiesForURL(response!.URL!)!
self.httpResponse = (response as? NSHTTPURLResponse)!
self.statusCode = (self.httpResponse!.statusCode)
guard error == nil && data != nil else {
print(error)
return
}
do {
if self.statusCode == 200 {
self.contentsOfURL = try NSString(contentsOfURL: self.URL, encoding: NSUTF8StringEncoding) as String
}
} catch {
}
}
}
self.task?.resume()
.
.
.
}
Merci. Le problème était que puisque .resume() attendait que tout finisse, il continuait sur une variable tout ce qui obtient sa valeur dans la tâche. Je peux donc travailler dans son propre fil et maintenant cela fonctionne. Je ne peux pas, cependant, obtenir le proxy pour travailler. Je sais que la mise en œuvre fonctionne parce que je reçois un 407, mais le nom d'utilisateur et pw ne fonctionnent pas. – dbconfession
Veuillez voir la réponse mise à jour (section Challenge). Dans votre cas, le défi est lancé qui doit être traité – user1046037