zoukankan      html  css  js  c++  java
  • 基本网络请求

    一、同步GET

    // 1.将网址初始化成一个OC字符串对象

    NSString *urlStr = [NSString stringWithFormat:@"%@?wewe=%@", @"111", @"222"];

    // 2.如果网址中存在中文,进行URLEncode
    NSString *newUrlStr = [urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
     
    // 3.构建网络URL对象, NSURL
    NSURL *url = [NSURL URLWithString:newUrlStr];
     
    // 4.创建网络请求
    NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:10];
     
    // 5.创建同步链接
    NSURLResponse *response = nil;
    NSError *error = nil;
    NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
     
    二、异步GET
     
    前四步基本一样

    // 1.将网址初始化成一个OC字符串对象

    NSString *urlStr = [NSString stringWithFormat:@"%@?wewe=%@", @"111", @"222"];

    // 2.如果网址中存在中文,进行URLEncode
    NSString *newUrlStr = [urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
     
    // 3.构建网络URL对象, NSURL
    NSURL *url = [NSURL URLWithString:newUrlStr];
     
    // 4.创建网络请求
    NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:10];
     
    不同的是在这里我们创建的是异步请求链接
     
    // 异步链接(形式1,较少用)
    [NSURLConnection sendAsynchronousRequest:requst queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
          //your code
        }]
     
    一般的,当创建异步连接时, 很少用到第一种方式,经常使用的是代理方法。
    // 异步连接(形式2)
     
    [NSURLConnection connectionWithRequest:request delegate:self];
     
    关于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
    {
        NSLog(@"%@", error);
    }
     
    三、同步POST
     

    // 1.将网址初始化成一个OC字符串对象

    NSString *urlStr = [NSString stringWithFormat:@"%@?wewe=%@", @"111", @"222"];

    // 2.如果网址中存在中文,进行URLEncode
    NSString *newUrlStr = [urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
     
    // 3.构建网络URL对象, NSURL
    NSURL *url = [NSURL URLWithString:newUrlStr];
     
    // 4.创建请求
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
     
    // 5.创建参数字符串对象
    NSString *parmStr = @"method=album.channel.get&appKey=myKey&format=json&channel=t&pageNo=1&pageSize=10";
     
    // 6.将字符串转为NSData对象
    NSData *pramData = [parmStr dataUsingEncoding:NSUTF8StringEncoding];
     
    // 7.设置请求体
    [request setHTTPBody:pramData];
     
    // 8.设置请求方式
    [request setHTTPMethod:@"POST"];
         
    // 9.创建同步链接
        NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
     
     
    四、异步POST
    前八步基本一样
     

    // 1.将网址初始化成一个OC字符串对象

    NSString *urlStr = [NSString stringWithFormat:@"%@?wewe=%@", @"111", @"222"];

    // 2.如果网址中存在中文,进行URLEncode
    NSString *newUrlStr = [urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
     
    // 3.构建网络URL对象, NSURL
    NSURL *url = [NSURL URLWithString:newUrlStr];
     
    // 4.创建请求
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
     
    // 5.创建参数字符串对象
    NSString *parmStr = @"method=album.channel.get&appKey=myKey&format=json&channel=t&pageNo=1&pageSize=10";
     
    // 6.将字符串转为NSData对象
    NSData *pramData = [parmStr dataUsingEncoding:NSUTF8StringEncoding];
     
    // 7.设置请求体
    [request setHTTPBody:pramData];
     
    // 8.设置请求方式
    [request setHTTPMethod:@"POST"];
     
    不同的是在这里我们创建的是异步请求链接
    // 9.创建异步连接(形式2)
    [NSURLConnection connectionWithRequest:request delegate:self];
     
    执行相应的代理方法,即可完成数据的请求。
     
    最后,分析一下这几种呢网络请求的区别。

    GET请求和POST请求的区别:

    1. GET请求的接口会包含参数部分,参数会作为网址的一部分,服务器地址与参数之间通过 ? 来间隔。POST请求会将服务器地址与参数分开,请求接口中只有服务器地址,而参数会作为请求的一部分,提交后台服务器。

    2. GET请求参数会出现在接口中,不安全。而POST请求相对安全。

    3.虽然GET请求和POST请求都可以用来请求和提交数据,但是一般的GET多用于从后台请求数据,POST多用于向后台提交数据。

    同步和异步的区别:

    同步链接:主线程去请求数据,当数据请求完毕之前,其他线程一律不响应,会造成程序就假死现象。

    异步链接:会单独开一个线程去处理网络请求,主线程依然处于可交互状态,程序运行流畅。

     
     
     
     
     
     
     
     
     
  • 相关阅读:
    VMware 克隆linux后找不到eth0(学习hadoop,所以想快速搭建一个集群)
    Qt之窗体透明 (三种不同的方法和效果)
    Qt之获取本机网络信息(MAC, IP等等,很全)
    Qt之图形(Source和Dest相互覆盖的取舍,真的很方便)
    Qt之QSpacerItem(控件之间的间距不尽相同,可以借助QSpacerItem来设置,并且还可以对QSpacerItem设置QSizePolicy)
    IoC在ASP.NET Web API中的应用
    ASP.NET MVC应用程序展示RDLC报表
    Ninject 在 Winform、 Asp.net MVC中连络EntityFramework的应用
    Apworks框架实战(三):单元测试与持续集成
    总体介绍ASP.NET Web API下Controller的激活与释放流程
  • 原文地址:https://www.cnblogs.com/lhx2015/p/4632902.html
Copyright © 2011-2022 走看看