网络请求 - Post解析

这篇博客探讨了Post模式在网络请求中的应用,重点在于异步请求的处理。介绍了两种创建异步Post请求的方法:block方法和代理方法,并强调了在Post请求中设置请求体(NSData类型)和标识的重要性。

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);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值