NSURLConnection

NSURLConnection的GET请求:

  - 发送同步请求

    // 0.请求路径
    NSURL *url = [NSURL URLWithString:@"http://XXX.XXX.XXX.XXX:32812/login?username=123&pwd=345"];

    // 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, response.allHeaderFields);

  - 发送异步请求

    // 0.请求路径
    NSURL *url = [NSURL URLWithString:@"http://XXX.XXX.XXX.XXX:32812/login?username=123t&pwd=123"];

    // 1.创建请求对象
    NSURLRequest *request = [NSURLRequest requestWithURL:url];

    // 2.发送请求
    [NSURLConnection sendAsynchronousRequest:request queue:[[NSOperationQueue alloc] init] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
        // 请求完毕会来到这个block
        // 3.解析服务器返回的数据(解析成字符串)
        NSString *string = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", string);
        //        NSHTTPURLResponse *r = (NSHTTPURLResponse *)response;
        //
        //        NSLog(@"%zd %@", r.statusCode, r.allHeaderFields);
    }];

  

  - 代理方式<NSURLConnectionDataDelegate>

- (void)delegateAysnc
{
    // 0.请求路径
    NSURL *url = [NSURL URLWithString:@"http://XXX.XXX.XXX.XXX:32812/login?username=122&pwd=123"];

    // 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];

    // 取消
//    [conn cancel];
}

#pragma mark - <NSURLConnectionDataDelegate> -- being
/**
 * 接收到服务器的响应
 */
- (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);

    self.responseData = nil;
}

/**
 * 请求失败(比如请求超时)
 */
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
    NSLog(@"didFailWithError -- %@", error);
}
#pragma mark - <NSURLConnectionDataDelegate> -- end

  - POST请求

 1.请求路径
    NSURL *url = [NSURL URLWithString:@"http://XXX.XXX.XXX.XXX:32812/login"];

    // 2.创建请求
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
    // 更改请求方法
    request.HTTPMethod = @"POST";
    // 设置请求体
    request.HTTPBody = [@"username=123&pwd=123" dataUsingEncoding:NSUTF8StringEncoding];
    // 设置超时(5秒后超时)
    request.timeoutInterval = 5;
    // 设置请求头
//    [request setValue:@"iOS 9.0" forHTTPHeaderField:@"User-Agent"];

    // 3.发送请求
    [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
        if (connectionError) { // 比如请求超时
            NSLog(@"----请求失败");
        } else {
            NSLog(@"------%@", [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]);
        }
    }];

- 总结下带中文的GET和POST

- (void)post
{
    // 0.请求路径
    NSString *urlStr = @"http://XXX.XXX.XXX.XXX:32812/login2";
    NSURL *url = [NSURL URLWithString:urlStr];

    // 1.创建请求对象
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
    request.HTTPMethod = @"POST";
    request.HTTPBody = [@"username=POST请求&pwd=123" dataUsingEncoding:NSUTF8StringEncoding];

    // 2.发送请求
    [NSURLConnection sendAsynchronousRequest:request queue:[[NSOperationQueue alloc] init] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
        // 3.解析服务器返回的数据(解析成字符串)
        NSString *string = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", string);
    }];
}

- (void)get
{
    // 0.请求路径
    NSString *urlStr = @"http://XXX.XXX.XXX.XXX:32812/login2?username=GET请求&pwd=123";
    // 将中文URL进行转码
    urlStr = [urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
    NSURL *url = [NSURL URLWithString:urlStr];

    // 1.创建请求对象
    NSURLRequest *request = [NSURLRequest requestWithURL:url];

    // 2.发送请求
    [NSURLConnection sendAsynchronousRequest:request queue:[[NSOperationQueue alloc] init] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
        // 3.解析服务器返回的数据(解析成字符串)
        NSString *string = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", string);
    }];
}
时间: 2024-12-22 07:05:16

NSURLConnection的相关文章

多线程与网络之NSURLConnection发送请求

*:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } a { color: #4183C4; } a.absent { color: #cc0000; } a.anchor { display: block; padding-left: 30px; margin-left: -30px; cursor: pointer; position: absolute

iOS学习笔记12-网络(一)NSURLConnection

一.网络请求 在网络开发中.须要了解一些经常使用的请求方法: GET请求:get是获取数据的意思,数据以明文在URL中传递,受限于URL长度,所以数据传输量比較小. POST请求:post是向server提交数据的意思.提交的数据以实际内容形式存放到消息头中进行传递,无法在浏览器url中查看到,大小没有限制. HEAD请求:请求头信息,并不返回请求数据体,而仅仅返回请求头信息,经常使用用于在文件下载中取得文件大小.类型等信息. 二.NSURLConnection NSURLConnection是

NSURLConnection和Runloop(面试)

(1)两种为NSURLConnection设置代理方式的区别 //第一种设置方式: //通过该方法设置代理,会自动的发送请求 // [[NSURLConnection alloc]initWithRequest:request delegate:self]; //第二种设置方式: //设置代理,startImmediately为NO的时候,该方法不会自动发送请求 NSURLConnection *connect = [[NSURLConnection alloc]initWithRequest:

文件下载 NSURLConnection——小文件下载

1.下载小文件,只适合几百k,1.2M的文件 //1.设置网址 //2.加载请求 //3.设置代理 //4.实现代理方法下载文件 NSURL *url = [NSURL URLWithString:@"https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1492791082124&di=fc642407b4ec19430334653a9b873cff&imgtype=0&a

ios开发网络学习:一:NSURLConnection发送GET,POST请求

#import "ViewController.h" @interface ViewController ()<NSURLConnectionDataDelegate> /** 注释 */ @property (nonatomic, strong) NSMutableData *resultData; @end @implementation ViewController #pragma mark ---------------------- #pragma mark la

NSURLConnection / NSURLSession/ SDWebImage

1. NSURLConnection (iOS9开始被弃用)=========================================== 此类的对象加载一个URL请求对象,通过异步/同步的方式发送请求,并获得响应. 此类位于Foundation框架下,继承自NSObject ------------------------------ 异步/同步?    通讯方式 异步:在请求发送后,无需等待响应结果,而是可以继续后续其他操作,该请求的响应在回调方法中处理(通常用到的代理方法或bloc

NSURLConnection的使用

一:NSURLConnection(IOS9.0已经弃用)是早期apple提供的http访问方式.以下列出了常用的几个场景:GET请求,POST请求,Response中带有json数据 对于NSURLConnection有以下注意事项:(1)sendAsynchronourequest: queue: completionHandler:函数中的queue参数表示的是“handler 这个block运行在queue中,如果queue为mainThread,那么hanlder就运行在主线程:所以在

iOS开发之网络编程--使用NSURLConnection实现大文件断点续传下载+使用输出流代替文件句柄

前言:本篇讲解,在前篇iOS开发之网络编程--使用NSURLConnection实现大文件断点续传下载的基础上,使用输出流代替文件句柄实现大文件断点续传.    在实际开发中,输入输出流用的比较少,但是用起来也是很方便的.iOS开发用到的输入输出流和在Java中的输入输出流是几乎一样的,本质也是一个意思:将网络返回的数据当做流来处理.    输入输出的理解:输入到哪里?输出到哪里?这个问题不难理解,输入输出是要站着服务器角度来思考的,下面用图来解释:    代码关键词: 1.在接收到响应头的代理

step 2 NSURLConnection

NSURLConnection 步骤 NSURL:确定要访问的资源 NSURLRequest:根据 URL 建立请求,向服务器索要数据 NSURLConnection:建立网络连接,将请求(异步)发送给服务器 示例代码 // 1. `NSURL`:确定要访问的资源 NSURL *url = [NSURL URLWithString:@"http://m.baidu.com"]; // 2. `NSURLRequest`:根据 `URL` 建立请求,向服务器索要数据 NSURLReque

NSURLConnection使用

*:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } a { color: #4183C4; } a.absent { color: #cc0000; } a.anchor { display: block; padding-left: 30px; margin-left: -30px; cursor: pointer; position: absolute