关闭

几种常见网络请求方式

377人阅读 评论(0) 收藏 举报
分类:
GET: 请求指定的页面信息,它本质就是发送一个请求来取得服务器上的某一资源。资源通过一组HTTP头和呈现数据(如HTML文本,或者图片或者视频等)返回给客户端。GET请求中,永远不会包含呈现数据。 

HEAD: 只请求页面的首部,HEAD和GET本质是一样的,区别在于HEAD不含有呈现数据,而仅仅是HTTP头信息,用于检查对象是否存在,以及得到对象的元数据。   

POST: 向服务器提交数据,请求服务器接受所指定的文档作为对所标识的URI的新的从属实体。  

PUT: 从客户端向服务器传送的数据取代指定的文档的内容,PUT和POST极为相似,都是向服务器发送数据,但它们之间有一个重要区别,PUT通常指定了资源的存放位置,而POST则没有,POST的数据存放位置由服务器自己决定。 

DELETE: 请求服务器删除指定的页面或某一个资源。 

OPTIONS: 允许客户端查看服务器的性能。   

TRACE: 请求服务器在响应中的实体主体部分返回所得到的内容。  

PATCH: 实体中包含一个表,表中说明与该URI所表示的原内容的区别,用于部分文档更改。

MOVE: 请求服务器将指定的页面移至另一个网络地址。  

COPY: 请求服务器将指定的页面拷贝至另一个网络地址。  

LINK: 请求服务器建立链接关系。  

UNLINK: 断开链接关系。   

WRAPPED: 允许客户端发送经过封装的请求。   

Extension-mothed:在不改动协议的前提下,可增加另外的方法


根据HTTP协议的设计初衷,不同的方法对资源有不同的操作方式
PUT :增
DELETE :删
POST:改
GET:查
提示:最常用的是GET和POST(实际上GET和POST都能办到增删改查)

GET和POST的区别使用:
(1)如果要传递大量数据,比如文件上传,只能用POST请求
(2)GET的安全性比POST要差些,如果包含机密\敏感信息,建议用POST
(3)如果仅仅是索取数据(数据查询),建议使用GET
(4)如果是增加、修改、删除数据,建议使用POST 

GET 和 POST两种网络请求方式的同步和异步连接
GET 同步
//1.创建网址字符串
NSString *urlStr = @"";
//2.URLEncode编码 对于网址中有中文的 需要更改编码格式
NSString *newString = [urlStr    
stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
//3.创建NSURL对象
NSURL *url = [NSURL URLWithString:newString];
//4.创建请求对象 NSURLRequest
NSURLRequest *request = [NSURLRequest requestWithURL:url];
//5.同步请求
NSURLResponse *response = nil;//服务器响应对象 存储服务器响应信息 返回数据的长度 数据的类型等
NSError *error = nil;//存储连接错误信息 如连接失败 网络中断等
NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];//data就是通过网址从服务器请求到的数据
//解析数据 供界面上显示
[self parseDataWithData:data];

GET 异步
//1.创建网址字符串
NSString *urlStr = @"";
//2.URLEcode编码 (网址中存在中文)
NSString *newStr = [urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
//3.创建NSURL对象
NSURL *url = [NSURL URLWithString:newStr];
//4.创建网址请求对象
NSURLRequest *request = [NSURLRequest requestWithURL:url];
//5.******异步请求第一种方式*******block形式********
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
//data 是服务器返回来的数据
[self parseDataWithData:data];
}];

 //********异步请求第二种方式******delegate******
[NSURLConnection connectionWithRequest:request delegate:self];
}

#pragma mark - NSURLConnectionDataDelegate -
//收到服务器的响应
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{
    //该方法在建立连接的过程中 只会执行一次
    self.data = [NSMutableData data];
}
//收到服务器数据
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{
    [self.data appendData:data];//拼接数据
}

//传输数据完毕时
- (void)connectionDidFinishLoading:(NSURLConnection *)connection{
    //解析
    [self parseDataWithData:self.data];
}

//连接失败时
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{

}

POST同步
//1.创建网址字符串
    NSString *str = [NSString stringWithFormat:kURL];
    //2.创建NSURL对象
    NSURL *url = [NSURL URLWithString:str];
    //3.创建请求对象
    NSMutableURLRequest *requset = [NSMutableURLRequest requestWithURL:url];
    //4.创建参数字符串
    NSString *parmStr = [NSString stringWithFormat:@"method=album.channel.get&appKey=myKey&format=json&channel=t&pageNo=1&pageSize=10"];
    //5.设置请求体 将参数字符串转化为NSData对象
    [requset setHTTPBody:[parmStr dataUsingEncoding:NSUTF8StringEncoding]];
    //6.设置请求方式
    [requset setHTTPMethod:@"POST"];
    //7.同步连接
    NSData *data = [NSURLConnection sendSynchronousRequest:requset returningResponse:nil error:nil];
    //8.解析
    [self parseData:data];

POST异步
//1.创建网址字符串
    NSString *str = [NSString stringWithFormat:kURL];
    //2.创建URL对象
    NSURL *url = [NSURL URLWithString:str];
    //3.创建请求对象
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
    //4.创建参数字符串
    NSString *parmStr = [NSString stringWithFormat:@"method=album.channel.get&appKey=myKey&format=json&channel=t&pageNo=1&pageSize=10"];
    //5.设置请求体 将参数字符串转化为NSdata对象
    [request setHTTPBody:[parmStr dataUsingEncoding:NSUTF8StringEncoding]];
    //6.设置请求方式
    [request setHTTPMethod:@"POST"];
    //7.异步连接
    ******异步请求第一种方式*******block形式********
    [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
        //解析
        [self parseData:data];
    }];
   //********异步请求第二种方式******delegate******
   [NSURLConnection connectionWithRequest:request delegate:self];
}
//连接成功
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{
    //开辟空间
    self.data = [NSMutableData data];
}
//接收数据
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{
    //拼接数据
    [self.data appendData:data];
    NSLog(@"%@", data);
}

//接收数据完毕
- (void)connectionDidFinishLoading:(NSURLConnection *)connection{
    //解析
    [self parseData:self.data];

}
//
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{

}

//解析数据
- (void)parseData:(NSData *)data{
    //系统JSON解析
    NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
    NSLog(@"%@", dict);
}
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:46048次
    • 积分:1002
    • 等级:
    • 排名:千里之外
    • 原创:49篇
    • 转载:54篇
    • 译文:0篇
    • 评论:3条
    最新评论