みなさんこんにちは、こんばんは!すっかり夏になりました。iPhoneからHTTP通信したくなる季節ですね!かなり無茶な流れですが今回はiOSにおけるHTTP通信をトピックとさせて頂きます。

NSURLConnectionを使っても良いのですが、素晴らしく楽なのでASIHTTPRequestというライブラリを使います。

■ダウンロード

こちらからダウンロードした後、解凍しプロジェクトに展開します。

ビルド

試しにビルドすると凄まじいほどにエラーが出ますので必要なライブラリなどを準備しましょう。

■セットアップ

Reachability

アップルが配布してるのでダウンロードして、Reachability.hとReachability.mをプロジェクトに取り込んでください。ASIHTTPRequestを使用する上で必要になります。

以下のフレームワーク・ライブラリが必要になりますのでリンクしてください。

  • SystemConfiguration.framework

ASIHTTPRequest

以下のフレームワーク・ライブラリが必要になりますのでリンクしてください。

  • CFNetwork.framework
  • MobileCoreService.framework
  • libz.dylib

ASIHTTPRequestをダウンロードしてきたディレクトリにサブディレクトリがあるのですが、それも含めてビルドする場合はさらに以下のフレームワーク・ライブラリが必要になります。

  • libxml2.dylib

Build Settings > Search Paths > Header Search Pathsに「$SDKROOT/usr/include/libxml2」を追記してください。

ちなみにTestディレクトリも含める場合は以下のフレームワークが必要になるようです。

ただフレームワーク内部でNSTaskを使っているようなのですが、もはやiOSには含まれていないらしく上手くビルド出来ませんでした。今回はTest以外のディレクトリで話を進めていきます。誰か分かる人いたら教えて下さい。

■実装

以下のようにする事でGETリクエスト(非同期)する事ができます。

[cc lang="c"]
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:[NSURL URLWithString:url]];
[request setDelegate:self];
[request setRequestMethod:@"GET"];
[request startAsynchronous];
[/cc]

以下のようにする事でPOSTリクエスト(非同期)する事ができます。

[cc lang="c"]
ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:[NSURL URLWithString:url]];
[request setDelegate:self];
[request setPostValue:@"this is a pen." forKey:@"key"];
[request startAsynchronous];
[/cc]

通信結果を受け取る

非同期で通信した結果をASIHTTPRequestDelegateで受け取ります。

[cc lang="c"]
#pragma mark -
#pragma mark ASIHTTPRequestDelegate
- (void)requestFinished:(ASIHTTPRequest *)request {
SBJSON *parser = [[SBJSON alloc] init];
NSDictionary *json = [parser objectWithString:[request responseString] error:nil];
[parser release];
}
- (void)requestFailed:(ASIHTTPRequest *)request {
NSError *error = [request error];
NSLog(@”%@”, error);
// 通信ができなかったときの処理
}
[/cc]

通信して取得した文字列は、[request responseString]に入ってますので煮たり焼いたりして使いましょう。上述のコードはJSONと仮定し、SBJSONというライブラリを使ってパースしています。

■まとめ

どうでしょうか?とってもカンタンですね!色々な事をやるあまり昔やった事を忘れかけてるのでメモしておきました’`,、’`,、ヾ(o´∀`o)ノ ‘`,、’`,、・・・あ、NSURLConnectionも参考に書こうかと思いましたが、アレがアレなのでまた次回にします。

  • http://www.hideblog.net ひでまん

    ありがとーーーー!!!
    すばらしい記事。
    助かりました。

Post Navigation