第一个iOS应用程序,正确的查询我的服务器的方式

时间:2015-11-12 15:31:49

标签: ios swift post

我刚刚完成了设置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服务器获取数据的选项有哪些?

1 个答案:

答案 0 :(得分:1)

这是iOS的常见问题,您必须连接到正确的SSL证书。 iOS中曾经存在隐藏类,允许您连接到非标准站点,这些站点在测试期间会有所帮助,但这些类必须在发布之前删除,否则Apple会拒绝。

最后一个答案是,如果您必须使用SSL(https),该网站必须拥有有效/正确的SSL证书。

顺便说一句,如果iOS默认情况下不支持它,那么看起来您可以更改您的应用程序(权限?)以允许它。我建议尝试这样做,因为安全通信在任何时候都不是必需的。