Je suis novice dans la programmation de swift et OS X. Pour mes premières étapes, j'ai voulu créer un outil de ligne de commande qui me connecte à l'interface web de mon opérateur de téléphonie mobile, puis montre la quantité de mes données laissées. J'ai commencé à écrire un emballage autour de NSURLSession pour rendre les choses plus faciles pour moi.Swift NSURLSession Les cookies NSURLRequest ne sont pas acceptés
Problème: Mon programme n'accepte pas les cookies.
J'ai essayé beaucoup de choses, en mettant aussi des politiques de cookie sur l'objet de session mais rien n'a changé. Comment puis-je faire accepter les cookies par mon programme et comment les utiliser dans des demandes ultérieures?
HttpClient.swift:
import Foundation
class HttpClient {
private var url: NSURL!
private var session: NSURLSession
internal init(url: String) {
self.url = NSURL(string: url)
self.session = NSURLSession.sharedSession()
session.configuration.HTTPShouldSetCookies = true
session.configuration.HTTPCookieAcceptPolicy = NSHTTPCookieAcceptPolicy.OnlyFromMainDocumentDomain
session.configuration.HTTPCookieStorage?.cookieAcceptPolicy = NSHTTPCookieAcceptPolicy.OnlyFromMainDocumentDomain
}
internal func sendGet() -> String {
var ready = false
var content: String!
var request = NSMutableURLRequest(URL: self.url)
var task = session.dataTaskWithRequest(request) {
(data, response, error) -> Void in
content = NSString(data: data, encoding: NSASCIIStringEncoding) as! String
ready = true
}
task.resume()
while !ready {
usleep(10)
}
if content != nil {
return content
} else {
return ""
}
}
internal func sendPost(params: String) -> String {
var ready = false
var content: String!
var request = NSMutableURLRequest(URL: self.url)
request.HTTPMethod = "POST"
request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")
request.HTTPBody = params.dataUsingEncoding(NSASCIIStringEncoding, allowLossyConversion: false)
request.HTTPShouldHandleCookies = true
var task = session.dataTaskWithRequest(request) {
(data, response, error) -> Void in
content = NSString(data: data, encoding: NSASCIIStringEncoding) as! String
ready = true
}
task.resume()
while !ready {
usleep(10)
}
if content != nil {
return content
} else {
return ""
}
}
internal func setUrl(url: String) {
self.url = NSURL(string: url)
}
}
main.swift
import Foundation
let loginPage = "https://service.winsim.de/"
let dataPage = "https://service.winsim.de/mytariff/invoice/showGprsDataUsage"
var hc = HttpClient(url: loginPage)
println(hc.sendPost("usernameField=username&passwordfield=password"))
hc.setUrl(dataPage)
println(hc.sendGet())
Hi! A travaillé parfaitement pour moi. Peut-être que vous pouvez l'améliorer en remplaçant certains caractères non autorisés comme les paramètres HTTP comme @ doit être% 40 J'ai eu peu de problème à ce sujet. Merci! – Ratinahirana
ce code est erroné. Porperty 'configuration' est' readonly' et 'copy' donc ce code ne change rien. Pour modifier efficacement la configuration de la configuration de 'NSURLSession', utilisez la méthode suivante: [' NSURLSession.init (configuration de la configuration: NSURLSessionConfiguration) '] (https://developer.apple.com/library/ios/documentation/Foundation/Reference/NSURLSession_class/#// apple_ref/occ/clm/NSURLSession/sessionWithConfiguration :). –