iOS 网络开发NSURLConnection——使用代理方法发送异步请求

要监听服务器返回的data,所以使用<NSURLConnectionDataDelegate>协议

常见大代理方法如下:

#pragma mark- NSURLConnectionDataDelegate代理方法

//当接收到服务器的响应(连通了服务器)时会调用

-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response

//当接收到服务器的数据时会调用(可能会被调用多次,每次只传递部分数据)

-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data

//当服务器的数据加载完毕时就会调用

-(void)connectionDidFinishLoading:(NSURLConnection *)connection

//请求错误(失败)的时候调用(请求超时\断网\没有网\,一般指客户端错误)

-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error

使用异步方法发送get请求的代码示例:

#import "YYViewController.h"
#import "MBProgressHUD+MJ.h"

@interface YYViewController ()<NSURLConnectionDataDelegate>
@property (weak, nonatomic) IBOutlet UITextField *username;
@property (weak, nonatomic) IBOutlet UITextField *pwd;
@property(nonatomic,strong)NSMutableData *responseData;
- (IBAction)login;

@end

@implementation YYViewController

- (IBAction)login {
//    1.提前的表单验证
    if (self.username.text.length==0) {
        [MBProgressHUD showError:@"请输入用户名"];
        return;
    }
    if (self.pwd.text.length==0) {
        [MBProgressHUD showError:@"请输入密码"];
        return;
    }
//    2.发送请求给服务器(带上账号和密码)
    //添加一个遮罩,禁止用户操作
    [MBProgressHUD showMessage:@"正在努力加载中...."];

//
//   2.1设置请求路径
    NSString *urlStr=[NSString stringWithFormat:@"http://192.168.1.53:8080/MJServer/login?username=%@&pwd=%@",self.username.text,self.pwd.text];
    NSURL *url=[NSURL URLWithString:urlStr];
    
//   2.2创建请求对象
//    NSURLRequest *request=[NSURLRequest requestWithURL:url];//默认就是GET请求
    //设置请求超时
    NSMutableURLRequest *request=[NSMutableURLRequest  requestWithURL:url];
    request.timeoutInterval=5.0;
    
//   2.3.发送请求
 //使用代理发送异步请求(通常应用于文件下载)
    NSURLConnection *conn=[NSURLConnection connectionWithRequest:request delegate:self];
    [conn start];
    NSLog(@"已经发出请求---");
}

#pragma mark- NSURLConnectionDataDelegate代理方法
/*
 *当接收到服务器的响应(连通了服务器)时会调用
 */
-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
    NSLog(@"接收到服务器的响应");
    //初始化数据
    self.responseData=[NSMutableData data];
}

/*
*当接收到服务器的数据时会调用(可能会被调用多次,每次只传递部分数据)
*/
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
    NSLog(@"接收到服务器的数据");
    //拼接数据
    [self.responseData appendData:data];
        NSLog(@"%d---%@--",self.responseData.length,[NSThread currentThread]);
}

/*
 *当服务器的数据加载完毕时就会调用
 */
-(void)connectionDidFinishLoading:(NSURLConnection *)connection
{
    NSLog(@"服务器的数据加载完毕");
    //隐藏HUD
    [MBProgressHUD hideHUD];
    
    //处理服务器返回的所有数据
    NSDictionary *dict=[NSJSONSerialization JSONObjectWithData:self.responseData options:NSJSONReadingMutableLeaves error:nil];
    
    //判断后,在界面提示登录信息
    NSString *error=dict[@"error"];
    if (error) {
        [MBProgressHUD showError:error];
    }else
    {
        NSString *success=dict[@"success"];
        [MBProgressHUD showSuccess:success];
    }
    NSLog(@"%d---%@--",self.responseData.length,[NSThread currentThread]);
}
/*
 *请求错误(失败)的时候调用(请求超时\断网\没有网\,一般指客户端错误)
 */
-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
//     NSLog(@"请求错误");
    //隐藏HUD
    [MBProgressHUD hideHUD];
    [MBProgressHUD showError:@"网络繁忙,请稍后重试!"];
}
@end

三、NSMutableURLRequest

NSMutableURLRequest是NSURLRequest的子类,常用方法有

设置请求超时等待时间(超过这个时间就算超时,请求失败)- (void)setTimeoutInterval:(NSTimeInterval)seconds;

设置请求方法(比如GET和POST)- (void)setHTTPMethod:(NSString *)method;

设置请求体- (void)setHTTPBody:(NSData *)data;

设置请求头- (void)setValue:(NSString *)value forHTTPHeaderField:(NSString *)field;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值