NSURLConnection的使用 - GET请求

使用之前,有必要了解一些基础知识
然后,再补充一点东西

NSURL:请求地址
NSURLRequest:一个NSURLRequest对象就代表一个请求,它包含 信息有
》一个NSURL对象
》请求方法,请求头,请求体
》请求超时...
》NSMutableURLRequest:NSURLRequest的子类
》NSURLConnection
1.负责发送请求,建立客户端和服务器的连接
2.发送数据给服务器,并收集来自服务器的响应数据

NSURLConnection的使用步骤

1.创建一个NSURL对象,设置请求路径
2.传入NSURL创建一个NSURLRequest对象 ,设置请求头和请求体
3.使用NSURLConnection发送请求

即先来一个URL,把url包装到request里,设置请求头、请求体,利用NSURLConnection发给服务器。服务器返回数据给NSURLConnection


NSURLConnection的使用 - GET请求_第1张图片
NSURLConnection的使用.png

由NSURLConnection来做收集与服务器之间的桥梁

NSURLConnection发送请求

1.同步请求get

-(void)sync
{
    /********发送一个GET请求给服务器********/
    //0.请求路径
    NSURL * url = [NSURL URLWithString:@"http://120.25.226.186:32812/login?username=123&pwd=123"];
    //    NSURL * url = [NSURL URLWithString:@"http://120.25.226.186:32812/video"];
    //1.创建请求对象
    NSURLRequest * request = [NSURLRequest requestWithURL:url];
    //2.发送请求
    //sendSynchronousRequest 阻塞式的方法,等待服务器返回数据
    NSHTTPURLResponse *response = nil;
    NSError *error = nil;
    NSData * data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
    //3.解析服务器返回的数据(解析成字符串)
    NSString * string = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
    NSLog(@"%@",string);
}

核心任务就是解析

2.异步请求get(block)

-(void)asyn
{
    //0.请求路径
    NSURL * url = [NSURL URLWithString:@"http://120.25.226.186:32812/login?username=123&pwd=123"];
    //1.创建请求对象
    NSURLRequest * request = [NSURLRequest requestWithURL:url];
    //2.发送请求
//参数1:NSURLRequest 
//参数2:[NSOperationQueue mainQueue] 线程队列,block在哪个线程中执行,主队列,也叫串行队列 
//参数3:response 携带者接口的信息 data 请求下来的数据

//队列有什么用呢?决定了解析数据在哪个线程中[NSOperationQueue mainQueue] 替换成 [[NSOperationQueue alloc] init] 
    [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {
        
        //请求完毕会到这个block
        //3.解析服务器返回的数据(解析成字符串)
        NSString * string = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@  %@",string,[NSThread currentThread]);
    }];
    NSLog(@"------------");
}

代理

适合做大文件下载,默认是异步请求

//遵循协议 
-(void)delegateAysnc
{
    //0.创建路径
    NSURL * url = [NSURL URLWithString:@"http://120.25.226.186:32812/login?username=520it&pwd=520it"];
    //1.创建请求对象
    NSURLRequest * request = [NSURLRequest requestWithURL:url];
    //2.创建连接对象
//     [[NSURLConnection alloc] initWithRequest:request delegate:self];
    //或者以下方法
    //    NSURLConnection *conn = [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:NO];
   //  [conn start];  
//或者 
   [NSURLConnection connectionWithRequest:request delegate:self];
//取消请求
//  NSURLConnection * conn = [NSURLConnection connectionWithRequest:request delegate:self];
  //  [conn cancel];

}
#pragma mark - NSURLConnectionDataDelegate -- begin

//接受到服务器响应
-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
    //创建data对象
    self.responseData = [NSMutableData data];
    NSLog(@"didReceiveResponse");
}

//接收到服务器数据(如果数据量比较的大,该方法会被多次调用)
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
    //不断拼接服务器返回数据
    [self.responseData appendData:data];
    NSLog(@"didReceiveData -- %zd",data.length);
}

//服务器的数据成功接受完毕
-(void)connectionDidFinishLoading:(NSURLConnection *)connection
{
    NSLog(@"connectionDidFinishLoading");
    NSString * string = [[NSString alloc] initWithData:self.responseData encoding:NSUTF8StringEncoding];
    NSLog(@" ---- %@",string);
}

//请求失败(比如超时 - 默认一分钟)
-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
    NSLog(@"didFailWithError -- %@",error);
}

#pragma mark - NSURLConnectionDataDelegate -- end

好了,总结一下

NSURLConnection发送请求
》同步请求
[NSURLConnection sendSynchronousRequest: returningResponse: error:];
》异步请求 根据服务器的返回数据的处理方式的不同,有可以分为两种
1.block回调
[NSURLConnection sendAsynchronousRequest: queue: completionHandler:]
2.代理,遵守
[[NSURLConnection alloc] initWithRequest: delegate:]

[[NSURLConnection alloc] initWithRequest: delegate: startImmediately:]
startImmediately是NO,就得调用start

[NSURLConnection connectionWithRequest: delegate:]
然后调用代理方法

你可能感兴趣的:(NSURLConnection的使用 - GET请求)