Swift  HTTP  GET请求例子

原文 http://swiftdeveloperblog.com/http-get-request-example-in-swift/

这个短博客我分享个例子:如何使用一个参数,创建和发送HTTP GET请求。我也会展示如何添加Basic Authorization header 或者 custom Token Auth header 的值到 HTTP请求。

在这个特别的例子,我建立了个Single View Application且只有一个ViewController,界面很基本,一个UITextField将会接收userName的值,一个按钮用户点击它可以发送HTTP 请求。
这里写图片描述
当点击Send 按钮的时候,会调用以下函数

@IBAction func sendButtonTapped(sender: AnyObject) { }

上面的的函数还没准备用于我们的项目中,我们还需要添加一些业务逻辑进去。第一步要做的事从UITextFiled 中取值并检查值是否为空。为了实现这个我们首先要为UITextField创建一个outlet。关于IBOutlet如下

class ViewController: UIViewController {
@IBOutlet weak var userNameTextField: UITextField!
...

现在我们修改一下函数“sendButtonTapped”,把它改成如下这样:

@IBAction func sendButtonTapped(sender: AnyObject) {

// Read textValue user inputs into userNameValue variable
let userNameValue = userNameTextField.text

// Check of userNameValue is not empty
if isStringEmpty(userNameValue!) == true
{
     return
}

// If we reach here then we can send http request

}

isStringEmpty 是一个我们需要去实现的自定义函数,我们来创建一个新的函数,这个新函数将会检查string的值是否为空,如果为空,返回true。

func isStringEmpty(var stringValue:String) -> Bool
    {
        var returnValue = false

        if stringValue.isEmpty  == true
        {
            returnValue = true
            return returnValue
        }

       // Make sure user did not submit number of empty spaces
        stringValue = stringValue.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet())

        if(stringValue.isEmpty == true)
        {
            returnValue = true
            return returnValue

        }

          return returnValue

    }

现在继续我们的函数sendButtonTapped,为它添加发送HTTP GET请求的代码。下面我提供完整的函数实现,并且在代码的注释中解释它的业务逻辑

@IBAction func sendButtonTapped(sender: AnyObject) {
        let userNameValue = userNameTextField.text

        if isStringEmpty(userNameValue!) == true
        {
            return
        }

        // Send HTTP GET Request

        // Define server side script URL
        let scriptUrl = "http://swiftdeveloperblog.com/my-http-get-example-script/"

        // Add one parameter
        let urlWithParams = scriptUrl + "?userName=\(userNameValue!)"

        // Create NSURL Ibject
        let myUrl = NSURL(string: urlWithParams);

        // Creaste URL Request
        let request = NSMutableURLRequest(URL:myUrl!);

        // Set request HTTP method to GET. It could be POST as well
        request.HTTPMethod = "GET"

        // If needed you could add Authorization header value
        // Add Basic Authorization
        /*
        let username = "myUserName"
        let password = "myPassword"
        let loginString = NSString(format: "%@:%@", username, password)
        let loginData: NSData = loginString.dataUsingEncoding(NSUTF8StringEncoding)!
        let base64LoginString = loginData.base64EncodedStringWithOptions(NSDataBase64EncodingOptions())
        request.setValue(base64LoginString, forHTTPHeaderField: "Authorization")
        */

        // Or it could be a single Authorization Token value
        //request.addValue("Token token=884288bae150b9f2f68d8dc3a932071d", forHTTPHeaderField: "Authorization")

        // Excute HTTP Request
        let task = NSURLSession.sharedSession().dataTaskWithRequest(request) {
            data, response, error in

            // Check for error
            if error != nil
            {
                print("error=\(error)")
                return
            }

            // Print out response string
            let responseString = NSString(data: data!, encoding: NSUTF8StringEncoding)
            print("responseString = \(responseString)")


            // Convert server json response to NSDictionary
            do {
                if let convertedJsonIntoDict = try NSJSONSerialization.JSONObjectWithData(data!, options: []) as? NSDictionary {

                    // Print out dictionary
                    print(convertedJsonIntoDict)

                    // Get value by key
                    let firstNameValue = convertedJsonIntoDict["userName"] as? String
                    print(firstNameValue!)

                }
            } catch let error as NSError {
                print(error.localizedDescription)
            }

        }

        task.resume()


    }

这个很简单,使用这个例子你可以对你的web 服务端发送HTTP GET 请求。如果你想了解这个例子具体怎么运行或者你要调试它,到这里下载https://github.com/simplyi/http-get-example
添加 Basic Authorization HTTP 请求头

请注意上面的函数,有一些代码注释掉了,注释掉的代码是关于添加带有Authorization值的HTTP Request Header (HTTP请求头) 。我用的服务端不要求使用Auth token 或 Basic Authorization。但是如果你的web 服务端要求使用 Basic Authorization,你可以添加下面代码:

let username = "myUserName"
        let password = "myPassword"
        let loginString = NSString(format: "%@:%@", username, password)
        let loginData: NSData = loginString.dataUsingEncoding(NSUTF8StringEncoding)!
        let base64LoginString = loginData.base64EncodedStringWithOptions(NSDataBase64EncodingOptions())
        request.setValue(base64LoginString, forHTTPHeaderField: "Authorization")

添加Auth Token 到 HTTP 请求头

如果你的RESTful web服务端 要求提供带有Auth Token 的HTTP请求头,你可以取消下面这段代码的注释,然后添加带有Auth Token值的Authorization header:

request.addValue("Token token=884288bae150b9f2f68d8dc3a932071d", forHTTPHeaderField: "Authorization")

对你有帮助。

阅读更多
换一批

没有更多推荐了,返回首页