首页 > 代码库 > 异步 POST
异步 POST
1 根据网址初始化OC字符串对象
NSString * urlString = [NSString stringWithFormat:@"%@",kVideoURL];
2 创建URL对象
NSURL * url = [NSURL URLWithString:urlString];
3 创建请求
NSMutableURLRequest * requrst = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:10];
4 创建参数字符串对象
NSString * parmStr = [NSString stringWithFormat:@"%@",@"method=album.channel.get&appKey=myKey&format=json&channel=t&pageNo=1&pageSize=10"];
5 将字符串转为NSDATA 对象
NSData * parmData = http://www.mamicode.com/[parmStr dataUsingEncoding:NSUTF8StringEncoding];
6 设置请求体
[requrst setHTTPBody:parmData];
7 设置请求方式
[requrst setHTTPMethod:@"POST"];
创建同步连接 设置代理
[NSURLConnection connectionWithRequest:requrst delegate:self];
服从代理
@interface ViewController () <NSURLConnectionDataDelegate>
@end
实现代理方法:
当收到服务器响应时 触发
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
获文件大小
length = [response expectedContentLength];
NSLog(@"%lld",length);
当收到服务器响应时 , 为data 开辟空间 , 接下来服务器要返回数据
self.data = http://www.mamicode.com/[NSMutableData data];
}
当收到服务器返回数据时触发 , 返回的可能是资源片段(此时该方法重复执行)
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
//拼接数据
[self.data appendData:data];
CGFloat rate = self.data.length * 1.0 / length;
NSLog(@"%g",rate);
}
当服务器返回所有数据后触发 . 数据返回完毕
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
// self.data;//就是服务器返回的所有的数据
//解析
NSDictionary * dic = [NSJSONSerialization JSONObjectWithData:self.data options:NSJSONReadingMutableContainers error:nil];
// NSLog(@"%@",dic);
此时数据已经全部获取, 假如数据时为tableViewCell 设置cell的内容 , 此时需要刷新 cell
[tableView reloadData];
}
服务器连接错误时触发
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
NSLog(@"%d",4);
}
异步 POST