2012/06/06更新

[XCODE] iPhoneアプリからHTTP送信する際に、POST送信、ヘッダ付与、クッキー付与を行う方法

このエントリーをはてなブックマークに追加            

先日の記事で「iPhoneアプリからHTTPを送信する方法」 (→こちら)にて、基本的な操作を記載しました。
今回は、POST通信を行う方法、HTTPヘッダーを追加する方法、Cookieを付与する方法を学んだので、 それらをブログに書きたいと思います。

NSMutableURLRequest Post Cookie Header




まずはPOST通信を行う方法

NSURLRequestで通信を行う場合には、GET通信となってしまいます。
POSTを選択したい場合には、NSMutableURLRequestというクラスを用いて、メソッドの変更を行います。
利用例は以下のような感じです。
// 送信したいURLを作成する
NSURL *url = [NSURLURLWithString:@"http://www.yoheim.net/"];
// Mutableなインスタンスを作成し、インスタンスの内容を変更できるようにする
NSMutableURLRequest *request = [[NSMutableURLRequestalloc] initWithURL:url];
// MethodにPOSTを指定する。
request.HTTPMethod = @"POST";

これでPOST通信を行うことが出来るようなります。
更にPOSTで送信したいメッセージをBody部分に追加したい場合には、 以下のような実装を行います。
// 送付したい内容を、key1=value1&key2=value2・・・という形の
// 文字列として作成する
NSString *email = @"aaa@bbb.ccc";
NSString *password = @"password";
NSString *body = [NSString stringWithFormat:@"Email=%@&Passwd=%@&service=reader", email, password];

// HTTPBodyには、NSData型で設定する
request.HTTPBody = [body dataUsingEncoding:NSUTF8StringEncoding];

あと、リクエストを送る部分は、普通の実装と同じです。
NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];




次にHTTPヘッダーを付与する方法

次にHTTPヘッダーを付与する場合の処理を記載します。
認証後のリクエスト送付で、トークンとかを独自にHTTPヘッダーに付与したい場合があるかと思います。
そんな時には、NSMutableURLRequestを使って、ヘッダー情報を付与することが出来ます。
NSURL *url = [NSURLURLWithString:@"http://www.yoheim.net/"];
NSMutableURLRequest *request = [[NSMutableURLRequestalloc] initWithURL:url];

// ヘッダー情報を追加する。
[request addValue:@"token=AIRJFJOIOIJDIE" forHTTPHeaderField:@"Authorization"];

上記の例では、Authorizationというヘッダ名で、「token=AIRJFJOIOIJDIE」という値を設定しています。
たったこれだけでHTTPヘッダーを追加することが出来ます。




最後にCookie情報を付与する方法

Cookie情報を付与したい場合に、ヘッダー情報の追加と同じやり方でもできますが、 専用のクラスを利用する事も可能です。
以下の例では、Cookie情報をHTTPヘッダーに付与しています。
// Cookieで出力したい情報をNSDictionary形式で作成する
NSMutableDictionary *authDictionary = [[NSMutableDictionary alloc] init];
[authDictionary setValue:@"value1" forKey:@"key1"];
[authDictionary setValue:@"value2" forKey:@"key2"];

// NSHTTPCookieを作成し、それを配列形式として、
// requestHeaderFieldsWithCookiesを使って、HTTPヘッダへ設定する
NSHTTPCookie *aCookie = [NSHTTPCookie cookieWithProperties:authDictionary];
NSArray *cookies = [NSArray arrayWithObjects:aCookie, nil];
NSDictionary *header = [NSHTTPCookie requestHeaderFieldsWithCookies:cookies];
[request setAllHTTPHeaderFields:header];

こんな感じでCookie情報を独自に付与する事が可能です。




参考資料

今回は、以下のクラスリファレンスを参照しました。詳細な情報は、以下をご参照ください。
- NSMutableURLRequest Class Reference
- NSHTTPCookie Class Reference




最後に

ネットワーク関連の処理って苦手な気持ちが一杯だったんですが、 ちょっとずつでもできるようになると楽しさを感じてきました。
CFSocketといった低レベルAPIもあるようなので、そのうち使えるようになれたら良いなぁと思います。
今回も最後までお読み頂きましてありがとうございました。






こんな記事もいかがですか?

RSS画像

もしご興味をお持ち頂けましたら、ぜひRSSへの登録をお願い致します。