HTTP常见的请求GET&POST

GET和POST是两种常见的与服务器进行交互的HTTP方法:html

1.GET:api

.GET从语意上是获取指定URL的资源服务器

.传输过程当中数据被放在请求的URL中。session

.传输的数据量小,这主要是由于受URL的长度限制。app

2.POSTpost

.POST从语意上是向指定URL的资源添加(提交)数据url

.将数据放在数据体(请求体),按照变量和值相对应的方式,传递到spa

action所指向URL线程

.全部数据对用户来讲不可见。code

.能够传输大量数据,上传文件只能使用POST

 

3.补充:

.HTTP请求中主要由两部分组成:http请求头,http请求体

POST请求才有请求体。

4.下面我将详细介绍如何设置请求头和请求体

如何取得响应头和响应体,以及如何监听数据传输事件。

5.首先get请求主要包含如下几个步骤:

1>构造URL

2>构造Request

3>配置session会话对象

4>构造session,发送会话请求

viewController中 1 - (IBAction)getAction:(id)sender {

 2     
 3     //1.构造URL
 4     NSString *stringURL = @"https://api.douban.com/v2/movie/us_box";  5     NSURL *url = [NSURL URLWithString:stringURL];  6     
 7     //2.构造Request  8     //通常使用可变的
 9     NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; 10     //<1>设置请求方式,默认就是GET请求
11     [request setHTTPMethod:@"GET"]; 12     //<2>设置超时时间
13     [request setTimeoutInterval:30]; 14     
15     //<3>设置请求头 16 // request setAllHTTPHeaderFields:<#(NSDictionary *)#> 17 // [request setValue:<#(NSString *)#> forHTTPHeaderField:<#(NSString *)#>] 18 // [request addValue:<#(NSString *)#> forHTTPHeaderField:<#(NSString *)#>] 19     
20     //<4>设置请求体 21 // [request setHTTPBody:<#(NSData *)#>] 22     
23     //4.构造session,发送会话请求
24     NSURLSession *session = [NSURLSession sharedSession]; 25     
26     NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { 27         
28         if (error == nil) { 29             //data 就是响应体 30             // response 能够获取响应头 31             // NSLog(@"data:%@",data); 32             
33             //<1>获取响应体 34             //将响应的数据转换成字符串
35             NSString *str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; 36             //错误,须要回到主线程操做UI 37             // _textView.text = str;
38             
39  [_textView performSelectorOnMainThread:@selector(setText:) withObject:str waitUntilDone:NO]; 40             
41             //<2>获取响应头
42             NSHTTPURLResponse *r = (NSHTTPURLResponse *)response; 43             NSDictionary *header = r.allHeaderFields; 44             NSLog(@"header:%@",header); 45  } 46  }]; 47     
48     //开始任务
49  [task resume]; 50     
51 //
52     
53 }

6.POST请求:

/*

示例:的URL及相对应的请求参数

 POST请求参数:movie_id=43485

 http://piao.163.com/m/movie/detail.html?app_id=1&mobileType=iPhone&ver=2.6&channel=appstore&deviceId=9E89CB6D-A62F-438C-8010-19278D46A8A6&apiVer=6&city=110000

 */

- (IBAction)postAction:(id)sender {
    
    //1.构造URL
    NSURL *url = [NSURL URLWithString:@"http://piao.163.com/m/movie/detail.html?app_id=1&mobileType=iPhone&ver=2.6&channel=appstore&deviceId=9E89CB6D-A62F-438C-8010-19278D46A8A6&apiVer=6&city=110000"];
    
    //2.构造Request
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url];
    
    //设置一些信息
    //<1>设置请求方式
    [request setHTTPMethod:@"POST"];
    //<2>设置请求超时时间
    [request setTimeoutInterval:30];
    //<3>设置请求头
//    [request setAllHTTPHeaderFields:<#(NSDictionary *)#>]

//    [request addValue:<#(NSString *)#> forHTTPHeaderField:<#(NSString *)#>]
//    [request setValue:<#(NSString *)#> forHTTPHeaderField:<#(NSString *)#>]

    //<4>设置请求体
    NSString *bodyString = @"movie_id=43485";
    NSData *data = [bodyString dataUsingEncoding:NSUTF8StringEncoding];
    [request setHTTPBody:data];
    
    //3.建立配置session的对象
    //4.构造session
    NSURLSession *session = [NSURLSession sharedSession];
    
    //连接服务器
    NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        
        if (error == nil) {
            
            //取得响应体
            NSString *str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
//            _textView.text = str;
            [_textView performSelectorOnMainThread:@selector(setText:) withObject:str waitUntilDone:YES];
            
            //取得响应头
            NSHTTPURLResponse *urlResponse = (NSHTTPURLResponse *)response;
            NSDictionary *dic = urlResponse.allHeaderFields;
            NSLog(@"dic:%@",dic);
        }
        
    }];
    
    //开始任务
    [task resume];
    
}

POST相对与GET步骤都差很少相同,只不过POST须要设置请求体。

相关文章
相关标签/搜索