功能:
func getData(url:String, complete: @escaping ([Int:Any]) -> Void) {
var array: [Int:Any] = [:]
let headers = [
"authorization": "Bearer codeBearer",
"cache-control": "no-cache"
]
print(headers)
print(url)
let request = NSMutableURLRequest(url: NSURL(string: url)! as URL, cachePolicy: .reloadIgnoringLocalAndRemoteCacheData, timeoutInterval: 10.0)
request.httpMethod = "GET"
request.allHTTPHeaderFields = headers
let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
if (error != nil) {
print(error!) // errore
} else {
let input = String(data: data!, encoding: .utf8)?.data(using: .utf8) // json
let json = try! JSON(data: input!)
print(json)
for (_,subJson):(String, JSON) in json {
let num = subJson["index"].int
if( num != nil ){
array[num!] = subJson
}
}
session.invalidateAndCancel()
complete(array)
}
})
dataTask.resume()
}
查看:
@IBOutlet weak var table: UITableView!
func reload(){
DispatchQueue.main.async{
self.table.reloadData()
}
}
override func viewDidLoad() {
super.viewDidLoad()
if( idCell == "cell" ){
fun.getData(url: fun.request("/v1/media", test: true), complete: { success in
self.array = success
self.reload()
})
}else{
fun.getData(url: fun.request("/v1/banner", test: true), complete: { success in
self.array = success
self.reload()
})
}
}
错误:
{
"message" : "'codeBearer' not a valid key=value pair (missing equal-sign) in Authorization header: 'Bearer codeBearer'."
}
如果我尝试通过curl发送请求,它每次都有效,而这里只在我第一次执行该功能时才有效,但是如果我关闭并重新打开应用程序它第一次再次工作,提示如何解决它?
答案 0 :(得分:0)
要清理下面的会话调用。
session.invalidateAndCancel()
答案 1 :(得分:0)
我知道这个答案很晚,但是在使用 SOAP Web服务时我遇到了同样的问题。
在调用REST服务时,应在SOAP服务调用上使用ephemeral
会话。
示例代码
let session = URLSession(configuration: .ephemeral)
这是关于各种类型的URL会话的文档表格苹果
default
会话的行为与共享会话非常相似,但允许
更多配置,并允许您逐步获取数据
代表。
Ephemeral
会话类似于共享会话,但不写
缓存,cookie或凭据存储到磁盘。
Background
会话可让您执行内容的上载和下载
在您的应用未运行时在后台运行。