[XCODE] iPhoneアプリからHTTP送信する際に、POST送信、ヘッダ付与、クッキー付与を行う方法
先日の記事で「iPhoneアプリからHTTPを送信する方法」
(→こちら)にて、基本的な操作を記載しました。
今回は、POST通信を行う方法、HTTPヘッダーを追加する方法、Cookieを付与する方法を学んだので、 それらをブログに書きたいと思います。
POSTを選択したい場合には、NSMutableURLRequestというクラスを用いて、メソッドの変更を行います。
利用例は以下のような感じです。
これでPOST通信を行うことが出来るようなります。
更にPOSTで送信したいメッセージをBody部分に追加したい場合には、 以下のような実装を行います。
あと、リクエストを送る部分は、普通の実装と同じです。
認証後のリクエスト送付で、トークンとかを独自にHTTPヘッダーに付与したい場合があるかと思います。
そんな時には、NSMutableURLRequestを使って、ヘッダー情報を付与することが出来ます。
上記の例では、Authorizationというヘッダ名で、「token=AIRJFJOIOIJDIE」という値を設定しています。
たったこれだけでHTTPヘッダーを追加することが出来ます。
以下の例では、Cookie情報をHTTPヘッダーに付与しています。
こんな感じでCookie情報を独自に付与する事が可能です。
- NSMutableURLRequest Class Reference
- NSHTTPCookie Class Reference
CFSocketといった低レベルAPIもあるようなので、そのうち使えるようになれたら良いなぁと思います。
今回も最後までお読み頂きましてありがとうございました。
今回は、POST通信を行う方法、HTTPヘッダーを追加する方法、Cookieを付与する方法を学んだので、 それらをブログに書きたいと思います。
まずは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もあるようなので、そのうち使えるようになれたら良いなぁと思います。
今回も最後までお読み頂きましてありがとうございました。