标签:
NSURL | 请求地址 |
NSURLRequest | 封装一个请求,保存发给服务器的全部数据 |
NSMutableURLRequest | NSURLRequest的子类,提供了改变请求的属性的方法 |
NSURLConnection | 负责发送请求,建立客户端和服务器的连接。发送NSURLRequest的数据给服务器,并收集来自服务器的响应数据 |
NSMutableURLRequest改变请求的属性方法如下:
NSURL *url = [NSURL urlWithString@"http://server.com/postme"];
NSMutableURLRequest *req = [NSMutableURLRequest requestWithURL:url];
[req setHTTPMethod:@"POST"];
[req setHTTPBody:[@"Post body" dataUsingEncoding:NSUTF8StringEncoding]];
使用NSURLConnection发送请求主要有三步:
(1)创建一个NSURL对象,设置请求路径;
(2)传入NSURL创建一个NSURLRequest对象,设置请求头和请求体;
(3)使用NSURLConnection发送NSURLRequest(发送请求)。
(整理自大神:http://www.cnblogs.com/wendingding/p/3813572.html);
同步请求 | 从因特网请求数据,一旦发送同步请求,程序将停止用户交互,直至服务器返回数据完成,才可以进行下一步操作, |
异步请求 | 不会阻塞主线程,而会建立一个新的线程来操作,用户发出异步请求后,依然可以对UI进行操作,程序可以继续运行 |
GET加载方式 | 将参数直接写在访问路径上。操作简单,不过容易被外界看到,安全性不高,地址最多255字节; |
POST加载方式 |
将参数放到body里面。POST请求操作相对复杂,需要将参数和地址分开,不过安全性高,参数放在body里面,不易被捕获。 |
get异步请求:
1 //第一步,创建url
2
3 NSURL *url = [NSURL URLWithString:@"http://api.hudong.com/iphonexml.do?type=focus-c"];
4
5 //第二步,创建请求
6
7 NSURLRequest *request = [[NSURLRequest alloc]initWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10];
8
9 //第三步,连接服务器
10
11 NSURLConnection *connection = [[NSURLConnection alloc]initWithRequest:request delegate:self];
post异步请求:
//第一步,创建url
NSURL *url = [NSURL URLWithString:@"http://api.hudong.com/iphonexml.do"];
//第二步,创建请求
NSMutableURLRequest *request = [[NSMutableURLRequest alloc]initWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10];
[request setHTTPMethod:@"POST"];
NSString *str = @"type=focus-c";
NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:data];
//第三步,连接服务器
NSURLConnection *connection = [[NSURLConnection alloc]initWithRequest:request delegate:self];
缓存协议(枚举类型)
NSURLRequestUseProtocolCachePolicy(基础策略)
NSURLRequestReloadIgnoringLocalCacheData(忽略本地缓存)
NSURLRequestReturnCacheDataElseLoad(首先使用缓存,如果没有本地缓存,才从原地址下载)
NSURLRequestReturnCacheDataDontLoad(使用本地缓存,从不下载,如果本地没有缓存,则请求失败,此策略多用于离线操作)
NSURLRequestReloadIgnoringLocalAndRemoteCacheData(无视任何缓存策略,无论是本地的还是远程的,总是从原地址重新下载)
NSURLRequestReloadRevalidatingCacheData(如果本地缓存是有效的则不下载,其他任何情况都从原地址重新下载)
(整理自大神:http://my.oschina.net/sunqichao/blog/75011);
HTTP Status Code:HTTP状态码,用以表示网页服务器HTTP响应状态的3位数字代码,它由 RFC 2616 规范定义。
服务器返回数据时,NSURLConnectionDelegate的代理方法:
//当接收到服务器的响应(连通了服务器)时会调用
- (void)connection:(NSURLConnection *)theConnection didReceiveResponse:(NSURLResponse *)response{
}
//当接收到服务器的数据时会调用(可能会被调用多次,每次只传递部分数据)
- (void)connection:(NSURLConnection *)aConn didReceiveData:(NSData *)data
{
}
//当服务器的数据加载完毕时就会调用
- (void)connectionDidFinishLoading:(NSURLConnection *)aConn
{
}
//请求错误(失败)的时候调用(请求超时\断网\没有网\,一般指客户端错误)
- (void)connection:(NSURLConnection *)aConn didFailWithError:(NSError *)error
{
}
苹果自带的NSJSONSerialization基于json的数据包封装和解析(相关第三方解析json类库有TouchJson,JSONKit,SBJon等)
封装:
NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys:@"value1",@"key1",@"value2",@"key2",@"value3",@"key3", nil];
// isValidJSONObject判断对象是否可以构建成json对象
if ([NSJSONSerialization isValidJSONObject:dic]){
NSError *error;
// 创造一个json从Data, NSJSONWritingPrettyPrinted指定的JSON数据产的空白,使输出更具可读性。
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dic options:NSJSONWritingPrettyPrinted error:&error];
NSString *json =[[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
NSLog(@"json data:%@",json);
}
解析:
NSError *error;
//加载一个NSURL对象
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://m.weather.com.cn/data/101120101.html"]];
//将请求的url数据放到NSData对象中
NSData *response = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
//IOS自带解析类NSJSONSerialization从response中解析出数据放到字典中
NSDictionary *weatherDic = [NSJSONSerialization JSONObjectWithData:response options:NSJSONReadingMutableLeaves error:&error];
NSDictionary *weatherInfo = [weatherDic objectForKey:@"weatherinfo"];
NSString *text = [NSString stringWithFormat:@"今天是 %@ %@ %@ 的天气状况是:%@ %@ ",[weatherInfo objectForKey:@"date_y"],[weatherInfo objectForKey:@"week"],[weatherInfo objectForKey:@"city"], [weatherInfo objectForKey:@"weather1"], [weatherInfo objectForKey:@"temp1"]];
NSLog(@"weatherInfo:%@", text );
(整理自大神:http://blog.csdn.net/xyz_lmn/article/details/8968187);
标签:
原文地址:http://www.cnblogs.com/moxuexiaotong/p/4858919.html