使用原生的函数构建一个简单的网络请求

  说到网络通信,第一个想到的肯定就是IP地址.IP地址当然重要,但是Ip地址辣么长,而且都是数字,谁能天天记得住啊~~(好痛苦啊)!
  所以就有了域名这种东东便于记忆.那么我们的网络通信当然要用到域名了,就是所谓的网址.
  那么当然就要有一个能够访问的url,所以:

第一步:构建url:

所谓的构建url其实就是从网上找个接口,现在网上有许多的免费的结构可供大家选择.
比如这样http://apis.baidu.com/chazhao/idcard/idcard?idcard=“430224198508085219” & apikey=”您自己的apices”,
就是这种url,就是api接口.这种接口网上有许多.
  • url后面的?是用来连接后面的那一堆和前面的那一堆的.
  • ?后面的idcard是指明了这是一个参数的名字,还有后面的apikey也是一样的.=后面是参数的值.
  • &是用来连接两个参数的,如果有三个参数那么后面还要在加上一个&符号,然后写参数的名字和值.
当然了如果参数有中文的话,那么需要特别注意了,中文需要编码:系统提供的函数:
  • 在以前使用的是stringByAddingPercentEscapesUsingEncoding:函数,但是这个函数在iOS9就被废弃了
  • 现在使用的stringByAddingPercentEncodingWithAllowedCharacters:函数,这个函数最低支持iOS7.使用这个函数编码之后的url只要是不没有网就可以被识别.小伙伴们在使用带有中文的url可能不会遇到问题,但是为了谨慎起见,还是使用函数编码之后的URL好一些.

第二步 构建请求:

构建完url之后,就该构建请求,那么说道构建请求,就要说说请求的种类了,请求的种类有好多
比如:GET, POST, HEAD, PUT, DELETE, OPTIONS, TRACE…. 
一般常用在网络通信之间的请求是get请求和post请求,这两种请求是有区别的,get请求的参数就像上面的那种,参数都会放在url后面与url拼接起来.
但是问题来了,既然get是这个样子,那么post是什么样子的呢.再说这个之前首先你要知道get请求的构建代码是怎么写的:
NSURLRequest * request = [NSURLRequest requestWithURL:url];
小伙伴们不难从这里看出来NSURLRequest给我的第一感觉是不够长,还有一种是NSMutableURLRequest 这种请求.这两个请求的区别是:
  • 第一个请求是不可变的,也就是说一旦请求构建处理来以后,请求的中的参数不可以改变.
  • 第二个请求是可变的,post请求就是用的这种方式创建的,示例:
/*如果是post请求请看第七部,否则请忽略第七部*/
NSMutableURLRequest * request = [NSMutableURLRequest requestWithURL:url];

第三步 就是构建会话了

系统提供了构建会话的函数(当然这个不是唯一的一种)
NSURLSession *urlSession = [NSURLSession sharedSession];
可以利用这个构建会话

第四步就是构建任务:

系统提供了好几种构建任务的方式这里只是其中的一种

- (NSURLSessionDataTask *)dataTaskWithRequest:(NSURLRequest *)request completionHandler:(void (^)(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error))completionHandler
示例如下:
 NSURLSessionDataTask *task = [urlSession dataTaskWithRequest:request completionHandler:^(NSData *  data, NSURLResponse *  response, NSError *  error) {
       if (!error) {
            NSString *responseString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
            NSLog(@"服务器返回的数据为:%@", responseString);
        }
        else
        {
            NSLog(@"请求错误:%ld, %@", error.code, error.localizedDescription);
        }
    }];
/*
第一个参数就是请求
第二个参数是一个block,是一个代码块(由于这种请求是异步的请求,所以你如果想在拿到数据之后还做一些什么事情的话可以写在这里)
*/

第五步 开始任务

当然最终要的就是要开启任务否则是不会发送请求的:
[task resume];

第六步 修改配置文件

不要以为这就完了,当然了这也差不多了.还有一点就是需要在你的info.plist中配置.
  • 需要添加一行App Transport Security Settings 然后点击前面那个加号,再添加一行Allow Arbitrary Loads.将这个选项置为YES,好了大功告成!

第七步(post请求请看,否则请绕过!!)

当然如果要构建post请求那么需要在构建请求的时候向可变请求中添加参数如下:
  // 设置请求方法
    request.HTTPMethod = @"POST";
    // 设置请求体
    NSString *paramsString = @"userName=小明&password=123456";
    // 字符串转化为data(由于请求体是NSData类型,所以需要将请求体添加转化成NSData类型)
    NSData *data = [paramsString dataUsingEncoding:NSUTF8StringEncoding];
    request.HTTPBody = data;
如有不对请多多指教~~
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值