1. 程式人生 > >iOS網路請求中常見的幾種方式

iOS網路請求中常見的幾種方式

POST與GET區別,以及POST與GET同步非同步的使用

①.GET一般用於獲取/查詢資源資訊,而POST一般用於更新資源資訊。②.從上面的http請求中就能看出,GET提交是將請求的資料附加到URL之後,用?分割、引數用&連線。並且字串已經被加密。而post的提交是放到了http包中。從這點看來GET請求的位址列會改變,RUL附加上了請求的資料,而POST位址列不會改變,UTL沒有變化。更加深一層看GET的安全性不高,很容易暴露資訊。③.另外雖然http協議沒有對傳輸資料大小進行限制也沒有對url長度進行限制,但是實際情況中瀏覽器對url進行限制,這樣GET的傳輸資料大小隨著URL長度被限制而受到限制。反觀POST由於不是通過URL傳值,所以沒有限制。

同步請求和非同步請求的區別和聯絡:

1.使用同步連結,當同步連線請求資料時,當資料還未請求成功之前,使用者介面做任何操作都是無效的,都是不會響應的。只有當請求資料完畢之後,才會響應使用者互動,所以通常會卡死主執行緒

2.非同步連線:當非同步請求時,會有單獨的子執行緒去請求資料,而主執行緒依然響應處理使用者互動,所以此時使用者互動得到處理,使用者流暢操作,使用者體驗比較好,所以開發過程中最多的還是非同步連結。

get請求的程式碼如下:

 //設定URL路徑
     NSString *urlStr=[NSString stringWithFormat:@"http://localhost:8080/MyWeb/Book?username=%@&password=%@&type=get",@"歐燕鬆",@"keso"];
     urlStr=[urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
     NSURL *url=[NSURL URLWithString:urlStr];
    //通過URL設定網路請求
    NSURLRequest *request = [[NSURLRequest alloc]initWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10];
 NSError *error=nil;
    //獲取伺服器資料
    NSData *requestData= [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:&error];
    if (error) {
        NSLog(@"錯誤資訊:%@",[error localizedDescription]);
    }else{
        NSString *result=[[NSString alloc]initWithData:requestData encoding:NSUTF8StringEncoding];
        NSLog(@"返回結果:%@",result);

    }

post請求方式程式碼如下:

//設定URL
    NSURL *url=[NSURL URLWithString:@"http://localhost:8080/MyWeb/Book"];
    //建立請求
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc]initWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10];
    
    [request setHTTPMethod:@"POST"];//設定請求方式為POST,預設為GET
    
    NSString *param= @"Name=部落格園&Address=http://www.cnblogs.com/xiaofeixiang&Type=post";//設定引數
    
    NSData *data = [param dataUsingEncoding:NSUTF8StringEncoding];
    
    [request setHTTPBody:data];
    
    //連線伺服器
    NSData *received = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];

    NSString *result= [[NSString alloc]initWithData:received encoding:NSUTF8StringEncoding];

    NSLog(@"%@",result);