不断收到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 
} 

}

+1

与您的问题无关,但您可以将该alertView创建并显示为帮助程序方法并将其调用并调用它,而不是创建具有如此多重复的alertView创建代码。 –

+1

可能的重复[如何在iOS 9中启用启用App Transport Security的HTTP URL?](http://*.com/questions/30731785/how-do-i-load-an-http-url-with启用功能于IOS-9 -app运输安全) –

我建议环境变量设置CFNETWORK_DIAGNOSTICS 3,运行你的应用程序,看到它记录了什么错误。这应该给你一些关于发生了什么问题的迹象。

可能性是,您的ATS异常以某种微妙的方式出错。