码迷,mamicode.com
首页 > Web开发 > 详细

HTTP常见的请求GET&POST

时间:2015-09-25 09:40:00      阅读:188      评论:0      收藏:0      [点我收藏+]

标签:

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

 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需要设置请求体。

 

HTTP常见的请求GET&POST

标签:

原文地址:http://www.cnblogs.com/wzh521/p/4837172.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!