NSURLSession: 没有身份验证 NSURLSession ( Swift )
NSURLSession: It is possible with no authentication NSURLSession ( Swift )
我想要一个 API -Key 并验证用户。我在控制台中收到消息“Session URL Task Succeeded: HTTP 200”。不幸的是,我总是收到页面“{”消息“:”的消息。此请求“}”的授权已被拒绝。我花了几个小时寻找并找到了解决方案。我请求你的帮助。这是我的代码:
let sessionConfig = NSURLSessionConfiguration.defaultSessionConfiguration()
let session = NSURLSession(configuration: sessionConfig, delegate: nil, delegateQueue: nil)
let URL = NSURL(string: "https://api.testhomepage.com/api/contact")
let request = NSMutableURLRequest(URL: URL!)
// Headers
request.addValue("ARRAffinity=259dfjiehfs315d7249df8805c7895a98c4cbd3327ffdcb82aaa16317f2e6", forHTTPHeaderField: "Cookie")
request.addValue("Basic dWVzQGp1bGl0ZafdgfvcfgeDcyZS1hZWEyLTQzYmVmMjFhNDMxZQ==", forHTTPHeaderField: "Authorization")
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
request.addValue("api.testhomepage.com", forHTTPHeaderField: "Host")
request.addValue("//api.testhomepage.com/api/contact: POST", forHTTPHeaderField: "https")
request.HTTPMethod = "GET"
// JSON Body
/* Start a new Task */
let task = session.dataTaskWithRequest(request) { (data: NSData?, response: NSURLResponse?, error: NSError?) -> Void in
if (error == nil) {
// Success
let statusCode = (response as! NSHTTPURLResponse).statusCode
print("URL Session Task Succeeded: HTTP \(statusCode)")
let myURLString = "https://api.testhomepage.com/api/contact"
if let myURL = NSURL(string: myURLString) {
var error: NSError?
let myhtml = try! NSString(contentsOfURL: myURL, encoding: NSUTF8StringEncoding)
if let error = error {
print("Error : \(error)")
} else {
print("HTML : \(myhtml)")
}
} else {
print("Error: \(myURLString) doesn't seem to be a valid URL")
}
}
else {
// Failure
print("URL Session Task Failed: %@", error!.localizedDescription);
}
}
task.resume()
}
这是在控制台中:
URL 会话任务成功:HTTP 200
HTML : {"Message":"Authorization has been denied for this request."}
使用request.setvalue("", forHTTPHeaderField: "")
代替request.addValue("", forHTTPHeaderField: "")
您 不能 自己填充身份验证 header,句号。 header 归 URL 加载系统所有,并根据用户钥匙串中的凭据填充。
您可以通过阅读URL Session Programming Guide的身份验证章节来了解如何进行身份验证。请注意,这些示例适用于 NSURLConnection,但其余文本适用于两者。
或者,您可以将凭据作为 Internet 密码项存储在钥匙串中,如 Keychain Services Programming Guide 中所述。
我想要一个 API -Key 并验证用户。我在控制台中收到消息“Session URL Task Succeeded: HTTP 200”。不幸的是,我总是收到页面“{”消息“:”的消息。此请求“}”的授权已被拒绝。我花了几个小时寻找并找到了解决方案。我请求你的帮助。这是我的代码:
let sessionConfig = NSURLSessionConfiguration.defaultSessionConfiguration()
let session = NSURLSession(configuration: sessionConfig, delegate: nil, delegateQueue: nil)
let URL = NSURL(string: "https://api.testhomepage.com/api/contact")
let request = NSMutableURLRequest(URL: URL!)
// Headers
request.addValue("ARRAffinity=259dfjiehfs315d7249df8805c7895a98c4cbd3327ffdcb82aaa16317f2e6", forHTTPHeaderField: "Cookie")
request.addValue("Basic dWVzQGp1bGl0ZafdgfvcfgeDcyZS1hZWEyLTQzYmVmMjFhNDMxZQ==", forHTTPHeaderField: "Authorization")
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
request.addValue("api.testhomepage.com", forHTTPHeaderField: "Host")
request.addValue("//api.testhomepage.com/api/contact: POST", forHTTPHeaderField: "https")
request.HTTPMethod = "GET"
// JSON Body
/* Start a new Task */
let task = session.dataTaskWithRequest(request) { (data: NSData?, response: NSURLResponse?, error: NSError?) -> Void in
if (error == nil) {
// Success
let statusCode = (response as! NSHTTPURLResponse).statusCode
print("URL Session Task Succeeded: HTTP \(statusCode)")
let myURLString = "https://api.testhomepage.com/api/contact"
if let myURL = NSURL(string: myURLString) {
var error: NSError?
let myhtml = try! NSString(contentsOfURL: myURL, encoding: NSUTF8StringEncoding)
if let error = error {
print("Error : \(error)")
} else {
print("HTML : \(myhtml)")
}
} else {
print("Error: \(myURLString) doesn't seem to be a valid URL")
}
}
else {
// Failure
print("URL Session Task Failed: %@", error!.localizedDescription);
}
}
task.resume()
}
这是在控制台中:
URL 会话任务成功:HTTP 200 HTML : {"Message":"Authorization has been denied for this request."}
使用request.setvalue("", forHTTPHeaderField: "")
代替request.addValue("", forHTTPHeaderField: "")
您 不能 自己填充身份验证 header,句号。 header 归 URL 加载系统所有,并根据用户钥匙串中的凭据填充。
您可以通过阅读URL Session Programming Guide的身份验证章节来了解如何进行身份验证。请注意,这些示例适用于 NSURLConnection,但其余文本适用于两者。
或者,您可以将凭据作为 Internet 密码项存储在钥匙串中,如 Keychain Services Programming Guide 中所述。