不断收到http传输安全错误,即使我已经添加了代码来绕过安全
问题描述:
我已经尝试了不同方法的加载,通常我使用的代码工作。然而在这种情况下,我不确定它是否与我使用的教程中的代码有关。他们使用https而不是http。我已经尝试过不同的方法,我不知道该怎么做!任何意见,将不胜感激。不断收到http传输安全错误,即使我已经添加了代码来绕过安全
@IBAction func signinTapped(sender : UIButton) {
let username:NSString = txtUsername.text!
let password:NSString = txtPassword.text!
if (username.isEqualToString("") || password.isEqualToString("")) {
let alertView:UIAlertView = UIAlertView()
alertView.title = "Sign in Failed!"
alertView.message = "Please enter Username and Password"
alertView.delegate = self
alertView.addButtonWithTitle("OK")
alertView.show()
} else {
do {
let post:NSString = "username=\(username)&password=\(password)"
NSLog("PostData: %@",post);
let url = NSURL(string:"http://")
let postData:NSData = post.dataUsingEncoding(NSASCIIStringEncoding)!
let postLength:NSString = String(postData.length)
let request:NSMutableURLRequest = NSMutableURLRequest(URL: url!)
request.HTTPMethod = "POST"
request.HTTPBody = postData
request.setValue(postLength as String, forHTTPHeaderField: "Content-Length")
request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")
request.setValue("application/json", forHTTPHeaderField: "Accept")
var reponseError: NSError?
var response: NSURLResponse?
var urlData: NSData?
do {
urlData = try NSURLConnection.sendSynchronousRequest(request, returningResponse:&response)
} catch let error as NSError {
reponseError = error
urlData = nil
}
if (urlData != nil) {
let res = response as! NSHTTPURLResponse!;
NSLog("Response code: %ld", res.statusCode);
if (res.statusCode >= 200 && res.statusCode < 300)
{
let responseData:NSString = NSString(data:urlData!, encoding:NSUTF8StringEncoding)!
NSLog("Response ==> %@", responseData);
//var error: NSError?
let jsonData:NSDictionary = try NSJSONSerialization.JSONObjectWithData(urlData!, options:NSJSONReadingOptions.MutableContainers) as! NSDictionary
let success:NSInteger = jsonData.valueForKey("success") as! NSInteger
//[jsonData[@"success"] integerValue];
NSLog("Success: %ld", success);
if(success == 1)
{
NSLog("Login SUCCESS");
let prefs:NSUserDefaults = NSUserDefaults.standardUserDefaults()
prefs.setObject(username, forKey: "USERNAME")
prefs.setInteger(1, forKey: "ISLOGGEDIN")
prefs.synchronize()
self.dismissViewControllerAnimated(true, completion: nil)
} else {
var error_msg:NSString
if jsonData["error_message"] as? NSString != nil {
error_msg = jsonData["error_message"] as! NSString
} else {
error_msg = "Unknown Error"
}
let alertView:UIAlertView = UIAlertView()
alertView.title = "Sign in Failed!"
alertView.message = error_msg as String
alertView.delegate = self
alertView.addButtonWithTitle("OK")
alertView.show()
}
} else {
let alertView:UIAlertView = UIAlertView()
alertView.title = "Sign in Failed!"
alertView.message = "Connection Failed"
alertView.delegate = self
alertView.addButtonWithTitle("OK")
alertView.show()
}
} else {
let alertView:UIAlertView = UIAlertView()
alertView.title = "Sign in Failed!"
alertView.message = "Connection Failure"
if let error = reponseError {
alertView.message = (error.localizedDescription)
}
alertView.delegate = self
alertView.addButtonWithTitle("OK")
alertView.show()
}
} catch {
let alertView:UIAlertView = UIAlertView()
alertView.title = "Sign in Failed!"
alertView.message = "Server Error"
alertView.delegate = self
alertView.addButtonWithTitle("OK")
alertView.show()
}
}
}
func textFieldShouldReturn(textField: UITextField) -> Bool { //delegate method
textField.resignFirstResponder()
return true
}
}
答
我建议环境变量设置CFNETWORK_DIAGNOSTICS 3,运行你的应用程序,看到它记录了什么错误。这应该给你一些关于发生了什么问题的迹象。
可能性是,您的ATS异常以某种微妙的方式出错。
与您的问题无关,但您可以将该alertView创建并显示为帮助程序方法并将其调用并调用它,而不是创建具有如此多重复的alertView创建代码。 –
可能的重复[如何在iOS 9中启用启用App Transport Security的HTTP URL?](http://stackoverflow.com/questions/30731785/how-do-i-load-an-http-url-with启用功能于IOS-9 -app运输安全) –