ios開發-UI高階 HTTP協議

A_StayFoolish發表於2016-08-10
1、HTTP協議的概念
· 全稱“超文字傳輸協議”,瀏覽器和伺服器之間的通訊規則 ·HTTP協議永遠都是客戶端發起請求,伺服器回送響應。
2、響應包、請求包
· 客戶端傳送一個HTTP請求,是向伺服器提交了一個HTTP請求包 
· 伺服器收到請求之後,向客戶端回應一個HTTP響應包
3、HTTP請求常用方法
· GET:是向伺服器索取資料的一種請求方式,所有引數拼湊在URL後面,並且引數之間用&隔開
  - 比如http://baidu.com?name=123*pwd=567
  - 傳遞了2個引數給伺服器{
      name引數:123
      pwd引數: 567
  }
  get方法沒有請求體,一般用來查詢資料
· POST:是向伺服器提交資料的一種請求方式,所有引數都放在請求體中,一般用來修改,增加,刪除資料

HTTP請求包的結構由兩部分組成:HTTP請求頭、HTTP請求體 
注意:POST請求方式才有請求體,GET請求只有請求頭

GET方法示例程式碼:

<span style="font-size:14px;"><strong>- (void)viewDidLoad {
    [super viewDidLoad];
    
    NSURL *url = [NSURL URLWithString:@"http://news-at.zhihu.com/api/3/news/latest"];
    // 建立請求
    NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60];
    // 建立會話(預設發起的是非同步的網路請求)
    NSURLSession *session = [NSURLSession sharedSession];
    // 任務
    NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
        // 列印錯誤
        if (error != nil) {
            NSLog(@"error = %@",error);
        }
        // 檢視狀態
        NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response;
        NSInteger statusCode = [httpResponse statusCode];
        // 請求頭
        NSDictionary *head = httpResponse.allHeaderFields;
        NSLog(@"%ld",statusCode);
        NSLog(@"%@",head);
        // 解析json資料
        id jsonData = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
        NSLog(@"jsonData = %@",jsonData);
        // 顯示在UI介面(需要回到主佇列)
        dispatch_async(dispatch_get_main_queue(), ^{
    
        });
        
    }];
    //任務重啟
    [task resume];
}</strong>
</span>
執行結果部分截圖:


POST方法程式碼示例:

<span style="font-size:14px;"><strong>- (void)viewDidLoad {
    [super viewDidLoad];
   
    NSURL *url = [NSURL URLWithString:@"http://news-at.zhihu.com/api/3/news/latest"];
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
    request.cachePolicy = NSURLRequestUseProtocolCachePolicy;
    request.timeoutInterval = 120;
    // 設定請求方式(預設為get)必須大寫
    request.HTTPMethod = @"POST";
    // 設定請求頭
    [request setValue:@"zh-cn" forHTTPHeaderField:@"Accept-Language"];
    // 會話
    NSURLSession *session = [NSURLSession sharedSession];
    // 任務
    NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
        // 列印錯誤
        if (error != nil) {
            NSLog(@"error = %@",error);
        }
        
        NSHTTPURLResponse *httpresponse = (NSHTTPURLResponse *)response;
        // 檢視狀態
        NSInteger statusCode = httpresponse.statusCode;
        // 請求頭
        NSDictionary *heards = httpresponse.allHeaderFields;
        NSLog(@"%ld",statusCode);
        NSLog(@"%@",heards);
        // 解析json資料
        id jsonData = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
        NSLog(@"%@",jsonData);
        
    }];
    // 任務重啟
    [task resume];
    
}
</strong></span>

執行結果:


相關文章