[Swift]POSTでAPIを叩く方法。(そしてJSONを取得する。)

  • 130
    いいね
  • 2
    コメント
この記事は最終更新日から1年以上が経過しています。

ソース

name=taro
pw=tarospw
というのを、POSThttp://hoge.com/api.phpに送る。っていうのをやります。

基本的な流れはGETと同じですが、NSMutableURLRequest使ってごにょごにょします。

swift

// まずPOSTで送信したい情報をセット。
let str = "name=taro&pw=tarospw"
let strData = str.dataUsingEncoding(NSUTF8StringEncoding)


var url = NSURL.URLWithString("http://hoge.com/api.php")
var request = NSMutableURLRequest(URL: url)

// この下二行を見つけるのに、少々てこずりました。
request.HTTPMethod = "POST"
request.HTTPBody = strData

var data = NSURLConnection.sendSynchronousRequest(request, returningResponse: nil, error: nil)

var dic = NSJSONSerialization.JSONObjectWithData(data, options:nil, error: nil) as NSDictionary

雑感:setHTTPMethod が無くて、困った!

objcで書いたときは、

objc
[request setHTTPMethod:@"POST"];
[request setHTTPBody:strData];

こうやって、setHTTPMethodsetHTTPBodyを使ってやっていたのですが、これらのメソッドを、Swiftでいくら書いても、エラーにしかならない。「そんなメソッド知りません。」っていうエラー。

こちらの記事で、なんとか動く方法を入手。
http://stackoverflow.com/questions/24051124/sethttpbody-in-ios-8-swift

swift
request.HTTPBody = postData

こんな風に書けばよいと知る。

これはSwiftでは、setterとかgetterとかが、なんやかんやしているから。ということらしいのですが。。僕にはその辺の知識が皆無です。。。仕様書でその辺のことを勉強しようと思います。

…それにしても、こんなことどこで知ればいいのだろう。。仕様書にも、HTTPBodyのこととか書いてないし。こういう情報はどうやって仕入れたらいいのでしょうか?それとも、これはそもそも僕がObjective-Cを一ヶ月くらいしかやったことがないから分からないことなのでしょうか。。

とにかく、Enrico Susatyo さんに感謝です。