Post模式请求分:同步与异步
Post模式异步请求在处理时有两种方法:
1.block方法创建异步请求
2.代理方法创建异步请求
Post模式注意的是需要携带一个NSData类型的请求体和设置一个标识
// post同步
- (void)leftButtonClick:(UIBarButtonItem *)leftButton {
// 创建网址对象
NSURL *url = [NSURL URLWithString:kNewsListURL];
// 创建请求
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:(NSURLRequestUseProtocolCachePolicy) timeoutInterval:10];
// 设置一个标识
// 注意:需要添加标识符 不可省略
[request setHTTPMethod:@"Post"];
// 把字符串转化成data 使用UTF-8的编码格式(携带的请求体)
NSData *data = [kNewsListParam dataUsingEncoding:NSUTF8StringEncoding];
// 注意区别: Post请求 可以携带一个请求体 post是加密的
[request setHTTPBody:data];
// 创建链接
NSData *newData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
// 解析数据
NSMutableDictionary *dataDic = [NSJSONSerialization JSONObjectWithData:newData options:(NSJSONReadingMutableContainers) error:nil];
NSLog(@"%@",dataDic);
}
- (void)rightButtonClick:(UIBarButtonItem *)rightButton {
// 创建网址对象
NSURL *url = [NSURL URLWithString:kNewsListURL];
// 创建请求
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:(NSURLRequestUseProtocolCachePolicy) timeoutInterval:10];
// 添加一个标识
[request setHTTPMethod:@"Post"];
// 添加请求体
NSData *datas = [kNewsListParam dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:datas];
// block方法创建异步请求
// [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {
// NSMutableDictionary *dataDic = [NSJSONSerialization JSONObjectWithData:data options:(NSJSONReadingMutableContainers) error:nil];
// NSLog(@"%@",data);
// }];
// 代理方法创建异步请求
self.connection = [NSURLConnection connectionWithRequest:request delegate:self];
[self.connection start];
}
#pragma mark -- 代理方法
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
NSLog(@"已经接收到服务器的响应信息,说明链接成功");
// 链接成功时 初始化可变的data
self.receiveData = [NSMutableData data];
NSLog(@"%@", response);
}
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
// 可能多次触发这个方法 才能接收到 完整的data
// 所以这时候 需要拼接一下data
[self.receiveData appendData:data];
NSLog(@"接收到数据触发的方法");
}
- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
NSLog(@"已经完成数据加载 触发的方法");
NSLog(@"%@",self.receiveData);
// 解析数据
NSMutableDictionary *dataDic = [NSJSONSerialization JSONObjectWithData:self.receiveData options:(NSJSONReadingMutableContainers) error:nil];
NSLog(@"%@",dataDic);
// 如果在TableView上展示的话
// 注意: 要刷新界面
}
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
NSLog(@"请求失败时触发 %@", error);
}