可变URL请求常用方法
//NSMutableRequest
NSURL *url = [NSURL URLWithString:@"www.baidu.com"];
//创建一个可变请求对象
NSMutableURLRequest *mRequest = [NSMutableURLRequest requestWithURL:url];
//查看请求的方法
NSLog(@"mutable request method:%@", [mRequest HTTPMethod]);
//初始化时没有head域部分
NSLog(@"mutable request heads :%@", [mRequest allHTTPHeaderFields]);
//设置请求方法
[mRequest setHTTPMethod:@"PUT"];
//简单设置几个请求的头域部分,参数是一个字典
[mRequest setAllHTTPHeaderFields:@{@"Connection":@"keep- alive",@"User-Agent": @"Mozilla/5.0"}];
- (void)setValue:(NSString *)value forHTTPHeaderField:(NSString *)field; // 设置单个http头域
- (void)addValue:(NSString *)value forHTTPHeaderField:(NSString *)field; //增加单个http头域
- (void)setHTTPBody:(NSData *)data; //设置http请求体
- (void)setHTTPShouldHandleCookies:(BOOL)should; //设置是否处理http的cookie
对于HTTP响应,也还包括HTTP响应的状态码,HTTP的响应的头域信息。
几个常用的方法
//查看http请求响应的状态码
NSLog(@"response status code:%d",[(NSHTTPURLResponse *)response statusCode]);
//查看http请求响应的资源大小
NSLog(@"response expect length:%lld", [(NSHTTPURLResponse *)response expectedContentLength]);
//查看http响应的所有头域
NSLog(@"response all headfield:%@",[(NSHTTPURLResponse *)response allHeaderFields]);
1.响应的状态码可以用来检测服务器对请求的出来情况。
2.响应的期望长度可以预计该资源的大小,计算进度。
3.响应头信息可以用于得到服务器返回的服务器信息及其它关于响应类容的信息、编码、缓存时间之类。
NSURLConnection类
这个类封装了对一个请求发起网络连接进行数据收发工作的相关东西,这类对象支持对一个请求的资源进行同步或异步再加载。
同步方法是阻塞的,完成后把资源直接返回;异步方法是非阻塞,事件变化和数据接收需要在代理对象中的方法进行处理。
NSURLConnection常用方法
//同步方法发送请求并获取返回值
NSURLResponse *response = [[NSURLResponse alloc]init];
NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:nil];! NSLog(@"response headers:%@",[(NSHTTPURLResponse *)response allHeaderFields]);!
NSLog(@"status code:%d", [(NSHTTPURLResponse *)response statusCode]);
//异步方法发送请求下载
NSURLConnection *_asyncConnect = nil;
if(_asyncConnect == nil) {
NSURL *asyncURL = [NSURL URLWithString:@"http:// mirrors.163.com/ubuntu-releases/13.04/ubuntu-13.04- desktop-amd64.iso"];
NSURLRequest *asyncRequest = [NSURLRequest requestWithURL:asyncURL];
_asyncConnect = [[NSURLConnection alloc]initWithRequest:asyncRequest delegate:self];}
//开始请求
[_asyncConnect start];
几个常用的协议方法实现
//请求失败的处理方法
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
NSLog(@"connent to %@ failed,%@", [[connection currentRequest] URL], error);
}
//请求连接返回的响应头的处理方法
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
NSLog(@"response status code:%d",[(NSHTTPURLResponse *)response statusCode]);
NSLog(@"response expect length:%lld", [(NSHTTPURLResponse *)response expectedContentLength]);
NSLog(@"response all headfield:%@",[(NSHTTPURLResponse *)response allHeaderFields]);
}
//请求连接收到数据的处理方法,如果数据量大就可能调用多次
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
NSString *dataStr = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"%@",dataStr);
}
//请求连接处理完成数据接收完后的处理方法
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
NSLog(@"connent to %@ finished", [[connection currentRequest] URL]);
}