Я новичок в программировании Quick и OS X. Для моих первых шагов я хотел создать инструмент командной строки, который регистрирует меня в веб-интерфейсе моего мобильного оператора, а затем показывает количество моих данных. Я начал писать обертку вокруг NSURLSession, чтобы облегчить мне работу.Swift NSURLSession NSURLRequest Cookies не принимаются
Проблема: Моя программа не принимает cookies.
Я пробовал много вещей, также устанавливая политики cookie для объекта сеанса, но ничего не изменилось. Как я могу заставить свою программу принимать файлы cookie и как их использовать в последующих запросах?
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! Работал идеально для меня. Возможно, вы можете улучшить его, заменив некоторый неавторизованный символ, поскольку параметры HTTP, такие как @, должны быть% 40. У меня было мало проблем. Спасибо! – Ratinahirana
этот код является неправильным. Конфигурация Porperty '' readonly' и 'copy', поэтому этот код ничего не меняет. Чтобы эффективно изменить конфигурацию «NSURLSession», используйте следующий метод: ['NSURLSession.init (конфигурация конфигурации: NSURLSessionConfiguration)'] (https://developer.apple.com/library/ios/documentation/Foundation/Reference/NSURLSession_class/#// apple_ref/ОКК/CLM/NSURLSession/sessionWithConfiguration :). –