2013/02/21更新

[XCODE] iPhoneアプリからHTTPリクエストを送信して、データを受信する方法

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

今日もiPhone開発ネタです(*゚▽゚)ノ
今日は、iPhoneアプリからHTTPリクエストを送信して、データ受信する方法を学んだので、 ブログに残したいと思います。NSURLConnection, NSURLRequestなどを使います。

NSURLConnection NSURLRequest



HTTP通信を行う方法

HTTP通信を行う方法は色々と準備されていますが、今回は 上位レイヤーで使い方が簡単なNSURLConnection, NSURLRequestを使います。

まずはRequestを送るところ

Requestを送るには、以下のようなソースコードで行うことが出来ます。

// 送信したいURLを作成し、Requestを作成します。
NSURL *url = [NSURL URLWithString:@"http://www.yoheim.net/"];
NSURLRequest  *request = [[NSURLRequest alloc] initWithURL:url];
    
// NSURLConnectionのインスタンスを作成したら、すぐに
// 指定したURLへリクエストを送信し始めます。
// delegate指定すると、サーバーからデータを受信したり、
// エラーが発生したりするとメソッドが呼び出される。
NSURLConnection *aConnection = [[NSURLConnection alloc] initWithRequest:request delegate:self];

// 作成に失敗する場合には、リクエストが送信されないので
// チェックする
if (!aConnection) {
  NSLog(@"connection error.");
}


続いてデータを受信した際の処理方法

データを受信すると、「connection:didReceiveResponse:」と「connection:didReceiveData:」と 「connectionDidFinishLoading:」の3つのDelegateメソッドが呼び出されます。
// データ受信時に1回だけ呼び出される。
// 受信データを格納する変数を初期化する。
- (void) connection:(NSURLConnection *) connection didReceiveResponse:(NSURLResponse *)response {

    // receiveDataはフィールド変数
  receivedData = [[NSMutableData alloc] init];
}

// データ受信したら何度も呼び出されるメソッド。
// 受信したデータをreceivedDataに追加する
- (void) connection:(NSURLConnection *) connection didReceiveData:(NSData *)data {
    [receivedData appendData:data];
}

// データ受信が終わったら呼び出されるメソッド。
- (void) connectionDidFinishLoading:(NSURLConnection *)connection {
    
    // 今回受信したデータはHTMLデータなので、NSDataをNSStringに変換する。
    NSString *html
        = [[NSString alloc] initWithBytes:receivedData.bytes 
                                   length:receivedData.length 
                                 encoding:NSUTF8StringEncoding];

  // 受信したデータをUITextViewに表示する。
  textView.text = html;

  // 終わった事をAlertダイアログで表示する。
    UIAlertView *alertView
        = [[UIAlertViewalloc] initWithTitle:nil 
                                    message:@"Finish Loading" 
                                   delegate:nil
                          cancelButtonTitle:@"OK"
                          otherButtonTitles:nil];
    [alertView show];
}

ポイントは、受信したデータをNSMutableDataにデータをApeendする事です。
これでRequestを送信して、データを受信できます。


最後にエラー処理を行う

Requestを送るも、何らかのエラーが発生すると以下のDelegateメソッドが呼び出されます。
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
    // エラー情報を表示する。
    // objectForKeyで指定するKeyがポイント
    NSLog(@"Connection failed! Error - %@ %@",
        [error localizedDescription],
        [[error userInfo] objectForKey:NSURLErrorFailingURLStringErrorKey]); 
}




参考資料

今回は、以下のリファレンスを参照しました。更に詳しい情報は、以下を参照ください。
URL Loading System Programming Guide



追記

2013/02/22
上記で紹介した方法以外にも、NSURLConnectionを利用したHTTPリクエスト送信方法を以下の記事で記載しました。
iOSから非同期/同期にHTTPリクエストを送信する方法(Part2)



最後に

また一つ新しい方法を知ることが出来て良かったです(*゚▽゚)ノ
また他の技術要素を学んだら、ブログに記載したいと思います。
最後までご参照頂きましてありがとうございました。






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

RSS画像

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