天天看點

iOS通過ASIHTTPRequest送出JSON資料

先驗知識——什麼是ASIHTTPRequest?

使用iOS SDK中的HTTP網絡請求API,相當的複雜,調用很繁瑣,ASIHTTPRequest就是一個對CFNetwork API進行了封裝,并且使用起來非常簡單的一套API,用Objective-C編寫,可以很好的應用在Mac OS X系統和iOS平台的應用程式中。ASIHTTPRequest适用于基本的HTTP請求,和基于REST的服務之間的互動。

如何使用ASIHTTPRequest?

上傳JSON格式資料

首先給出主功能代碼段,然後對代碼進行詳細解析:

NSDictionary *user = [[NSDictionary alloc] initWithObjectsAndKeys:@"0", @"Version", nil];  

                if ([NSJSONSerialization isValidJSONObject:user])  

                {  

                    NSError *error;  

                    NSData *jsonData = [NSJSONSerialization dataWithJSONObject:user options:NSJSONWritingPrettyPrinted error: &error];  

                    NSMutableData *tempJsonData = [NSMutableData dataWithData:jsonData];  

                    //NSLog(@"Register JSON:%@",[[NSString alloc] initWithData:tempJsonData encoding:NSUTF8StringEncoding]);  

                    NSURL *url = [NSURL URLWithString:@"http://42.96.140.61/lev_version.php"];  

                    ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];  

                    [request addRequestHeader:@"Content-Type" value:@"application/json; encoding=utf-8"];  

                    [request addRequestHeader:@"Accept" value:@"application/json"];  

                    [request setRequestMethod:@"POST"];  

                    [request setPostBody:tempJsonData];  

                    [request startSynchronous];  

                    NSError *error1 = [request error];  

                    if (!error1) {  

                        NSString *response = [request responseString];  

                        NSLog(@"Test:%@",response);  

                    }  

                }  

代碼段第一行:

構造了一個最簡單的字典類型的資料,因為自iOS 5後提供把NSDictionary轉換成JSON格式的API。

第二行if判斷該字典資料是否可以被JSON化。

NSData *jsonData = [NSJSONSerialization dataWithJSONObject:user options:NSJSONWritingPrettyPrinted error: &error];  

這一句就是把NSDictionary轉換成JSON格式的方法,JSON格式的資料存儲在NSData類型的變量中。

NSMutableData *tempJsonData = [NSMutableData dataWithData:jsonData];  

這一句是把NSData轉換成NSMutableData,原因是下面我們要利用ASIHTTPRequest發送JSON資料時,其消息體一定要以NSMutableData的格式存儲。

下面一句注視掉的語句

//NSLog(@"Register JSON:%@",[[NSString alloc] initWithData:tempJsonData encoding:NSUTF8StringEncoding]);  

主要作用是記錄剛才JSON格式化的資料

下面到了ASIHTTPRequest功能部分:

NSURL *url = [NSURL URLWithString:@"http://xxxx"];  

這兩句的主要功能是設定要與用戶端互動的伺服器端位址。

接下來兩句:

[request addRequestHeader:@"Content-Type" value:@"application/json; encoding=utf-8"];  

是設定HTTP請求資訊的頭部資訊,從中可以看到内容類型是JSON。

接下來是設定請求方式(預設為GET)和消息體:

[request setRequestMethod:@"POST"];  

一切設定完畢後開啟同步請求:

[request startSynchronous];  

最後的一段:

if (!error1) {  

                        NSLog(@"Rev:%@",response);  

是列印伺服器傳回的響應資訊。

如何聯系我:【萬裡虎】www.bravetiger.cn

【QQ】3396726884 (咨詢問題100元起,幫助解決問題500元起)

【部落格】http://www.cnblogs.com/kenshinobiy/

繼續閱讀