[XCODE] iPhoneアプリからHTTPリクエストを送信して、データを受信する方法
今日もiPhone開発ネタです(*゚▽゚)ノ
今日は、iPhoneアプリからHTTPリクエストを送信して、データ受信する方法を学んだので、 ブログに残したいと思います。NSURLConnection, NSURLRequestなどを使います。
ポイントは、受信したデータをNSMutableDataにデータをApeendする事です。
これでRequestを送信して、データを受信できます。
URL Loading System Programming Guide
上記で紹介した方法以外にも、NSURLConnectionを利用したHTTPリクエスト送信方法を以下の記事で記載しました。
iOSから非同期/同期にHTTPリクエストを送信する方法(Part2)
また他の技術要素を学んだら、ブログに記載したいと思います。
最後までご参照頂きましてありがとうございました。
今日は、iPhoneアプリからHTTPリクエストを送信して、データ受信する方法を学んだので、 ブログに残したいと思います。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)
最後に
また一つ新しい方法を知ることが出来て良かったです(*゚▽゚)ノまた他の技術要素を学んだら、ブログに記載したいと思います。
最後までご参照頂きましてありがとうございました。