如何在Swift中创建GET,POST和PUT请求?

时间:2015-03-31 04:17:24

标签: ios swift post get put

我可以在swift中与此代码段同步连接到服务器。

let URL: NSURL = NSURL(string: "http://someserver.com)!
let InfoJSON: NSData? = NSData(contentsOfURL: URL)
let JsonInfo: NSString = NSString(data:InfoJSON!, encoding: NSUTF8StringEncoding)!
let GameListAttributions: NSArray = NSJSONSerialization.JSONObjectWithData(InfoJSON!, options: .allZeros, error: nil)! as NSArray

这仅适用于一次性接收信息,但我如何使用Swift使用GET,POST和PUT。无论我搜索多少,我都无法找到关于如何执行这些内容的好教程或示例。

4 个答案:

答案 0 :(得分:6)

let url = NSURL(string: "https://yourUrl.com") //Remember to put ATS exception if the URL is not https
let request = NSMutableURLRequest(URL: url!)
request.addValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type") //Optional
request.HTTPMethod = "PUT"
let session = NSURLSession(configuration:NSURLSessionConfiguration.defaultSessionConfiguration(), delegate: nil, delegateQueue: nil)
let data = "username=self@gmail.com&password=password".dataUsingEncoding(NSUTF8StringEncoding)
request.HTTPBody = data

let dataTask = session.dataTaskWithRequest(request) { (data, response, error) -> Void in

    if error != nil {

        //handle error
    }
    else {

        let jsonStr = NSString(data: data!, encoding: NSUTF8StringEncoding)
        print("Parsed JSON: '\(jsonStr)'")
    } 
}
dataTask.resume()

答案 1 :(得分:4)

我为项目创建了一个函数,使用正确的参数可以发布,放置和获取

private func fetchData(feed:String,token:String? = nil,parameters:[String:AnyObject]? = nil,method:String? = nil, onCompletion:(success:Bool,data:NSDictionary?)->Void){

    dispatch_async(dispatch_get_main_queue()) {
        UIApplication.sharedApplication().networkActivityIndicatorVisible = true

        let url = NSURL(string: feed)
        if let unwrapped_url = NSURL(string: feed){

            let request = NSMutableURLRequest(URL: unwrapped_url)

            if let tk = token {
                let authValue = "Token \(tk)"
                request.setValue(authValue, forHTTPHeaderField: "Authorization")
            }

            if let parm = parameters{
                if let data = NSJSONSerialization.dataWithJSONObject(parm, options:NSJSONWritingOptions(0), error:nil) as NSData? {

                    //println(NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions(0), error: nil))
                    request.HTTPBody = data
                    request.setValue("application/json", forHTTPHeaderField: "Content-Type")
                    request.setValue("\(data.length)", forHTTPHeaderField: "Content-Length")
                }
            }

            if let unwrapped_method = method {
                request.HTTPMethod = unwrapped_method
            }

            let sessionConfiguration = NSURLSessionConfiguration.defaultSessionConfiguration()
            sessionConfiguration.timeoutIntervalForRequest = 15.0
            let session = NSURLSession(configuration: sessionConfiguration)
            let taskGetCategories = session.dataTaskWithRequest(request){ (responseData, response, error) -> Void in



                let statusCode = (response as NSHTTPURLResponse?)?.statusCode
                //println("Status Code: \(statusCode), error: \(error)")
                if error != nil || (statusCode != 200 && statusCode != 201 && statusCode != 202){
                    onCompletion(success: false, data:nil)

                }
                else {
                    var e: NSError?
                    if let dictionary = NSJSONSerialization.JSONObjectWithData(responseData, options: .MutableContainers | .AllowFragments, error: &e) as? NSDictionary{
                        onCompletion(success:true,data:dictionary)

                    }
                    else{
                        onCompletion(success: false, data:nil)
                    }
                }
            }

            UIApplication.sharedApplication().networkActivityIndicatorVisible = false
            taskGetCategories.resume()
        }
    }
}

这个如何使用功能:

    fetchData(feed,token: Constants.token(), parameters: params, method: "POST", onCompletion: { (success, data) -> Void in
            if success { //Code after completion} })
  • feed - >这是服务器的链接
  • 令牌(可选) - >出于安全目的,某些请求需要令牌
  • 参数(可选) - >这些是您可以传递给服务器的所有参数。 (这是字典btw)
  • 方法(可选) - >在这里,您可以选择所需的请求类型(" GET"," POST"," PUT")
  • 完成关闭 - >在这里传递一个将在请求完成时执行的函数。在闭包中,你得到两个参数:"成功"是一个bool,表明请求是否成功,"数据"。这是一本包含所有响应数据的字典。(可能是零)

希望我帮助过。抱歉我的英文

答案 2 :(得分:0)

您可以使用swift NSMutableURLRequest发出POST请求。

Swift GET示例:

let requestURL = NSURL(string:"urlhere")!

var request = NSMutableURLRequest(URL: requestURL)
request.HTTPMethod = "GET"

let session = NSURLSession.sharedSession()
let task = session.dataTaskWithRequest(request, completionHandler:loadedData)
task.resume()

文档POST示例:

NSString *bodyData = @"name=Jane+Doe&address=123+Main+St";

NSMutableURLRequest *postRequest = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"https://www.apple.com"]];

// Set the request's content type to application/x-www-form-urlencoded
[postRequest setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];

// Designate the request a POST request and specify its body data
[postRequest setHTTPMethod:@"POST"];
[postRequest setHTTPBody:[NSData dataWithBytes:[bodyData UTF8String] length:strlen([bodyData UTF8String])]];

这是在Objective-c中,但很容易转换为swift。

<强>文档: https://developer.apple.com/library/prerelease/ios/documentation/Cocoa/Conceptual/URLLoadingSystem/Tasks/UsingNSURLConnection.html#//apple_ref/doc/uid/20001836-SW4

答案 3 :(得分:-1)

简单的 Swift 5 GET 请求:

let params = "param1=something&param2=whatever".addingPercentEncoding(withAllowedCharacters: .urlHostAllowed)!
let task = URLSession(configuration: .default).dataTask(with: URLRequest(url: URL(string: "https://web.com/test.php?\(params)")!))
task.resume()