LoginSignup
9
8

More than 5 years have passed since last update.

Xcode7,iOS9でHTTP-POSTリクエストする

Posted at

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で設定する必要があります.

9
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
8