網絡請求 同步get 同步post 異步get 異步post

Get請求 : 從服務端直接獲取數據
1.Get請求一般只是從服務器獲取數據, 請求時一般會提交服務器一些請求參數, 附加載URL上的, 參數之間以&分割
2.URL中英文和數字進行原樣識別, 而中文或者一些其他字符需要計算機再進行編碼
3.Get請求提交的數據一般放在http協議的頭header中

Post請求 : 上傳數據改變服務端的內容
1.Post請求多用於給服務器提交數據
2.Post請求提交的數據一般放在http的主題數據包body中

Get與Post之間的區別 :
數據量的限制不同 :
(1)由於get請求提交的數據是依附於URL中, http協議沒規定URL長度及請求參數的個數, 所以理論上不存在大小限制, 但是不同瀏覽器對支持的URL最大先對有所限制
(2)http協議也沒有規定Post請求的大小, 所以理論上post的大小也沒有限制。但是往往服務端考慮到處理數據的能力, 會對它做一些限制。 但是一般Post請求數據的量會大於Get請求
安全性不同 :
(1)由於Get請求的數據附加語URL上, 所以提交的數據是可以看見的, 數據包被攔截後也是明文的, 再者瀏覽器的瀏覽的歷史記錄也會被人看見, 加入提交的是用戶名和麪那就很不安全
(2)Post提交的數據是在body體中, 相對安全性更高一些

請求一般分爲三步:
1.創建URL
2.創建請求Request
3.建立連接 完成數據請求

一、同步GET請求(Synchronous)

// 把網址放在字符串中
NSString *strURL = @"http://api.map.baidu.com/place/v2/search?query=銀行&region=大連&output=json&ak=6E823f587c95f0148c19993539b99295";
    //  因爲網址裏面不允許有漢字, 只能有26個字母的大小寫, 數字, 和一些特定的符號, 比如&, %, /等, 所以有中文的網址要先把中文變成相對應的數字編碼
    //  漢字變編碼的方法  stringByAddingPercentEscapesUsingEncoding
    NSString *strURLEncode = [strURL stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
    //  1. 創建一個URL
    NSURL *url = [NSURL URLWithString:strURLEncode];
    //  2. 發送一個請求
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
    //  3. 建立一個連接
    // 參數1: 把創建好的請求發送
    // 參數2: 返回的響應信息
    // 參數3: 錯誤信息
    NSURLResponse *response = nil;
    NSError *error = nil;
    NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
    //  把data進行json解析
    NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
    NSLog(@"%@", dic);
    NSLog(@"%@", response);
    //如果出現的錯誤是 :  data parameter is nil   是因爲進行data進行json解析不能是空的, 首先檢查網絡, 或者是把程序和網絡斷開, 重新連接

同步POST

//  post請求需要在請求的過程中 添加一個body, 添加之後纔可以獲取數據
    NSString *urlStr = @"http://ipad-bjwb.bjd.com.cn/DigitalPublication/publish/Handler/APINewsList.ashx";
    //  1. 創建一個URL
    NSURL *url = [NSURL URLWithString:urlStr];
    //  2. 創建一個請求
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
    // 先指定請求方式, 默認是get請求
    [request setHTTPMethod:@"POST"];
    //  body的字符串
    NSString *bodyStr = @"date=20131129&startRecord=1&len=30&udid=1234567890&terminalType=Iphone&cid=213";
    //  body的字符串變成NSData形式
    NSData *bodydata = [bodyStr dataUsingEncoding:NSUTF8StringEncoding];
    //  把bodydata放到request中
    [request setHTTPBody:bodydata];
    //  3. 建立一個連接
    NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
    //  4. 把data進行json解析
    NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
    NSArray *arr = dic[@"news"];
    for (NSDictionary *dic1 in arr) {
        NSLog(@"%@", dic1[@"summary"]);
    }

異步GET(AsyncSocket)

#pragma mark - 異步Get請求
#pragma mark - NSURLConnectionDataDelegate
- (IBAction)asynGET:(id)sender {
    NSString *strURL = @"http://img4.duitang.com/uploads/item/201207/28/20120728105310_jvAjW.thumb.600_0.jpeg";
    //  1. 創建URL
    NSURL *url = [NSURL URLWithString:strURL];
    //  2. 創建請求
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
    //  3. 建立連接
    [NSURLConnection connectionWithRequest:request delegate:self];
    //  這個方法可以在2.0到9.0之間的版本使用, 9.0以上的版本不能使用這個方法, 注意!!!!
}
#pragma mark - 會返回響應信息
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
    // 這個方法會返回響應信息
    //  初始化裝數據的容器
    self.data = [NSMutableData data];
}
#pragma mark - 接受到服務器返回的數據時調用(如果數據比較多, 這個方法可能會被調用多次)
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
    NSLog(@"接受服務器返回的數據");
    //  這個方法會接受返回的數據
    // 拼接數據
    [self.data appendData:data];
}
#pragma mark - 網絡連接時出錯時調用
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
    NSLog(@"網絡連接出錯");
}
#pragma mark - 服務器的數據已經接受完畢時調用
- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
    NSLog(@"服務器的數據已經接受完畢");
    //  把圖片顯示在上面
    self.imageView.image = [UIImage imageWithData:self.data];
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章