Xcode
Swift

SwiftでHTTPリクエストする

More than 3 years have passed since last update.

SwiftでシンプルにHTTP-GETするサンプルコードは多数見かけるが、HTTP-POSTする例を見かけないので、HTTP-GET、JSONデータをHTTP-POSTするコードをシンプルに書いてみた。

環境

- Xcode 6.1

- iOS 8.1


ViewController.swift

import UIKit

class ViewController: UIViewController {

override func viewDidLoad() {
super.viewDidLoad()
}

override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}

// HTTP-GET
@IBAction func getAsync(sender: AnyObject) {

// create the url-request
let urlString = "http://httpbin.org/get"
var request = NSMutableURLRequest(URL: NSURL(string: urlString)!)

// set the method(HTTP-GET)
request.HTTPMethod = "GET"

// use NSURLSessionDataTask
var task = NSURLSession.sharedSession().dataTaskWithRequest(request, completionHandler: { data, response, error in
if (error == nil) {
var result = NSString(data: data, encoding: NSUTF8StringEncoding)!
println(result)
} else {
println(error)
}
})
task.resume()

}

// HTTP-POST
@IBAction func postAsync(sender: AnyObject) {

// create the url-request
let urlString = "http://httpbin.org/post"
var request = NSMutableURLRequest(URL: NSURL(string: urlString)!)

// set the method(HTTP-POST)
request.HTTPMethod = "POST"
// set the header(s)
request.addValue("application/json", forHTTPHeaderField: "Content-Type")

// set the request-body(JSON)
var params: [String: AnyObject] = [
"foo": "bar",
"baz": [
"a": 1,
"b": 20,
"c": 300
]
]
request.HTTPBody = NSJSONSerialization.dataWithJSONObject(params, options: nil, error: nil)

// use NSURLSessionDataTask
var task = NSURLSession.sharedSession().dataTaskWithRequest(request, completionHandler: {data, response, error in
if (error == nil) {
var result = NSString(data: data, encoding: NSUTF8StringEncoding)!
println(result)
} else {
println(error)
}
})
task.resume()

}

}