网络请求可简单的分为三步骤
1.确定请求地址 NSURL
2.确定NSURLRequest / NSMutableURLRequest(post 使用)
3.NSURLConnection
最后根据苹果的习惯,网络请求肯定是有代理的:
NSURLConnectionDataDelegate
//服务器开始返回数据
-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{
NSLog(@"didReceiveResponse");
}
//接收服务器返回的数据 //会被多次调用
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{
NSLog(@"didReceiveData");
[self.data appendData:data];
}
//数据接收完毕
-(void)connectionDidFinishLoading:(NSURLConnection *)connection{
NSString *result =[[NSString alloc] initWithData:self.data encoding:NSUTF8StringEncoding];
NSLog(@"result: %@",result);
self.data = nil;
}
//连接错误
-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{
NSLog(@"didFailWithError");
}
//发送数据给服务器 post方法请求使用
-(void)connection:(NSURLConnection *)connection didSendBodyData:(NSInteger)bytesWritten totalBytesWritten:(NSInteger)totalBytesWritten totalBytesExpectedToWrite:(NSInteger)totalBytesExpectedToWrite{
NSLog(@"didSendBodyData");
}
Get请求:
-(void)testGetRequest{
NSString *strUrl = @"http://c.51wnl.com/api4.3.2/getstar.ashx?starname=aries";
NSURL *url = [NSURL URLWithString:[strUrl stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:5];
NSURLConnection *conn = [[NSURLConnection alloc] initWithRequest:request delegate:self];
[conn start];
}
Post 请求
-(void)testPostRequest{
NSString *strUrl = @"http://c.51wnl.com/api4.3.2/getstar.ashx?";
NSURL *url = [NSURL URLWithString:strUrl];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:5];
[request setHTTPMethod:@"POST"];
NSString *bodyStr = [NSString stringWithFormat:@"starname=%@",@"aries"];
[request setHTTPBody:[bodyStr dataUsingEncoding:NSUTF8StringEncoding]];
NSURLConnection *conn = [NSURLConnection connectionWithRequest:request delegate:self];
[conn start];
}
最后一个也记下:缓存策略
typedef NS_ENUM(NSUInteger, NSURLRequestCachePolicy)
{
//默认的缓存策略,要在协议的实现方法中指定缓存逻辑
NSURLRequestUseProtocolCachePolicy = 0,
//忽略本地缓存
NSURLRequestReloadIgnoringLocalCacheData = 1,
//忽略本地和远程的缓存数据 直接从服务器请求数据
NSURLRequestReloadIgnoringLocalAndRemoteCacheData = 4, // Unimplemented
//忽略缓存从原始地址下载
NSURLRequestReloadIgnoringCacheData = NSURLRequestReloadIgnoringLocalCacheData,
//缓存有数据就从缓存中加载,否则从服务器中请求
NSURLRequestReturnCacheDataElseLoad = 2,
//只使用缓存数据
NSURLRequestReturnCacheDataDontLoad = 3,
//验证本地数据与远程数据是否相同 相同使用,否则重新加载数据
NSURLRequestReloadRevalidatingCacheData = 5, // Unimplemented
};