标签:
GET和POST是两种常见的与服务器进行交互的HTTP方法:
1.GET:
.GET从语意上是获取指定URL的资源
.传输过程中数据被放在请求的URL中,对于用户来说不安全。
.传输的数据量小,这主要是因为受URL的长度限制。
2.POST
.POST从语意上是向指定URL的资源添加(提交)数据
.将数据放在数据体(请求体),按照变量和值相对应的方式,传递到
action所指向URL
.所有数据对用户来说不可见。相对安全
.可以传输大量数据,上传文件只能使用POST
3.补充:
.我们这里所说的安全性,只是相对与用户来说。
如果从服务器角度考虑,POST是不安全,GET是安全的。
.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
*/
- (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需要设置请求体。
标签:
原文地址:http://www.cnblogs.com/wzh521/p/4837172.html