WebサーバにPOSTしてデータを取得(同期)

2010/11/18

WebでAPIを用意してPOSTリクエストし、結果を取得する方法。 基本的にNSMutableURLRequestを利用するが、同期・非同期によってコーディングや構造が異なってくる。 取りあえず処理しやすい同期で実装してみる。

仕様

・API URL:http://hoge.com/user_login/ ※APIのプログラムは省略 ・POSTデータ:id、passwd ・API出力データ:JSON

ソース

[cpp] NSString *urlString = [self userLoginURI:loginId :password]; NSString *postString = [NSString stringWithFormat:@"id=%@&passwd=%@", loginId, password]; NSData *post = [postString dataUsingEncoding:NSUTF8StringEncoding];

    NSURL* url = @"http://hoge.com/user_login/";
    NSMutableURLRequest* urlRequest = [[NSMutableURLRequest alloc]initWithURL:url];
    [urlRequest setHTTPMethod:@"POST"];
    [urlRequest setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"content-type"];
    [urlRequest setHTTPBody:post];
    NSURLResponse* response;
    NSError* error = nil;
    NSData* result = [NSURLConnection sendSynchronousRequest:urlRequest
                                           returningResponse:&response
                                                       error:&error];

    NSString* resultString = [[NSString alloc] initWithData:result encoding:NSUTF8StringEncoding];
    NSLog(@"%@", resultString);

     if (result != nil) {
        NSDictionary *results = [NSDictionary alloc];
        results = [[resultString JSONValue] retain];
        [user bind:results];
        NSLog(@"%@", results);
    }

同期処理と言う事で、sendSynchronousRequest:urlRequestメソッドを利用する。