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

More than 5 years have passed since last update.


ソース

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 さんに感謝です。