Swift  HTTP  GET请求例子

来源:互联网 发布:淘宝上开网店要钱吗 编辑:程序博客网 时间:2024/06/14 19:49

原文 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 variablelet userNameValue = userNameTextField.text// Check of userNameValue is not emptyif 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")

对你有帮助。

0 0
原创粉丝点击