我刚刚完成了设置first test iOS app in Xcode的教程。一切顺利。我做了很多网站开发,我非常熟悉数据请求。我在云中有一个ubuntu服务器,我想用它来将数据返回给应用程序。
最好的方法是什么?
我尝试设置一个基本的http请求,但是我收到一条错误,说默认情况下iOS不允许非安全连接。然后我在我的服务器上设置了HTTPS,并确认我可以通过Web浏览器获取数据,即使它警告我证书不受信任。好的,所以然后从我的iOS应用程序中它给了我一些关于NSURLErrorFailingURLPeerTrustErrorKey
的错误,甚至还有一行返回说:NSLocalizedRecoverySuggestion=Would you like to connect to the server anyway?
。我的所有代码现在都在这里:
import UIKit
class ViewController: UIViewController, UITextFieldDelegate, NSURLSessionDelegate {
// MARK: Properties
@IBOutlet weak var nameTextField: UITextField!
@IBOutlet weak var mealNameLabel: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
// Handle the text field’s user input through delegate callbacks.
nameTextField.delegate = self
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
// MARK: UITextFieldDelegate
func textFieldShouldReturn(textField: UITextField) -> Bool {
// Hide the keyboard.
textField.resignFirstResponder()
return true
}
func textFieldDidEndEditing(textField: UITextField) {
mealNameLabel.text = nameTextField.text
}
// MARK: Actions
@IBAction func setDefaultLabelText(sender: UIButton) {
mealNameLabel.text = "Default Text"
post_request()
}
func post_request(){
let request = NSMutableURLRequest(URL: NSURL(string: "https://54.164.XXX.XX/post_script.php")!)
request.HTTPMethod = "POST"
let postString = "id=13&name=Jack"
request.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding)
let task = NSURLSession.sharedSession().dataTaskWithRequest(request) {
data, response, error in
if error != nil {
print("error=\(error)")
return
}
print("response = \(response)")
let responseString = NSString(data: data!, encoding: NSUTF8StringEncoding)
print("responseString = \(responseString)")
}
task.resume()
}
}
那么设置数据请求的最佳方法是什么? HTTPS是唯一的选择吗?是否可以在不购买正确的ssl证书的情况下建立安全连接以获取数据?我的意思是我一直使用ssh连接到服务器并且它是免费的。从iOS服务器获取数据的选项有哪些?
答案 0 :(得分:1)
这是iOS的常见问题,您必须连接到正确的SSL证书。 iOS中曾经存在隐藏类,允许您连接到非标准站点,这些站点在测试期间会有所帮助,但这些类必须在发布之前删除,否则Apple会拒绝。
最后一个答案是,如果您必须使用SSL(https),该网站必须拥有有效/正确的SSL证书。
顺便说一句,如果iOS默认情况下不支持它,那么看起来您可以更改您的应用程序(权限?)以允许它。我建议尝试这样做,因为安全通信在任何时候都不是必需的。