iOS9でHTTP-POSTリクエストするサンプルが見当たらなかったのでまとめます.
環境
- Xcode 7.0.1
- iOS 9.0(13A340)
やりたかったこと
とりあえず試しにBODYとかには何も入れずに,POSTリクエストするだけして,帰ってきたものを表示するだけ.
ViewController.swift
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var text: UITextView!
@IBAction func POST(sender: UIButton) {
var str:String = ""
// URLの設定
let url = NSURL(string: "https://sample.com")
// セッションの生成
let conf = NSURLSessionConfiguration.defaultSessionConfiguration()
let session = NSURLSession(configuration: conf)
// リクエストの生成
let req = NSMutableURLRequest(URL: url!)
req.HTTPMethod = "POST"
// タスクの生成
let task = session.dataTaskWithRequest(req, completionHandler: {
(data, resp, err) in
if(err == nil){
str = String(data: data!, encoding: NSUTF8StringEncoding)!
} else {
str = String(err)
}
dispatch_async(dispatch_get_main_queue(), {
// メインスレッドで処理する内容
self.text.text = str
})
})
// タスク実行
task.resume()
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.conf
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
セッション作って,リクエスト作って,URL入れてってところはiOS8とかと同じようなのですが,
どうやらセッションの使い方,というかタスクの作り方がiOS9だと違うようです.
// タスクの生成
let task = session.dataTaskWithRequest(req, completionHandler: {
(data, resp, err) in
if(err == nil){
str = String(data: data!, encoding: NSUTF8StringEncoding)!
} else {
str = String(err)
}
dispatch_async(dispatch_get_main_queue(), {
// メインスレッドで処理する内容
self.text.text = str
})
})
// タスク実行
task.resume()
あと,POST先のサーバーはHTTPSでないとATSに止められてしまうので,根本的に「HTTPSしか使わない」.それができない場合はplistで設定する必要があります.