iOS 网络编程
iOS 开发中所需的数据基本都是来自网络,网络数据请求是 iOS 编程中必不可少的,应该熟练掌握网络请求.
网络请求方式有 :GET , POST , PUT ,DELETE 等,其中常用的就是 GET,POST . GET 和 POST 请求存在着不同,GET 将数据参数跟在 URL 后面,POST 参数放在 body 中,不可见.
数据请求方式分为同步请求和异步请求,其中常用的是异步请求,异步请求避免了因组线程阻塞而造成的崩溃.这里主要说下异步请求.
1.GET 同步请求 用 NSURLConnection 实现:
步骤:建立 request ----> 建立衔接请求数据 ------> 解析数据
代码:
#pragma mark --- get 同步 ---
- (IBAction)getOne:(id)sender {
self.allNewsArray = [[NSMutableArray alloc]init];
//url 地址
NSURL *url = [NSURL URLWithString:PATH];
//请求
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
//建立衔接请求数据
NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
//如果数据不为空就解析
if (data) {
NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options: error:nil];
//处理数据,用 model 存储
for (NSDictionary *dic1 in [dic objectForKey:@"news"]) {
NewsModel *model = [[NewsModel alloc]init];
[model setValuesForKeysWithDictionary:dic1];
[self.allNewsArray addObject:model];
} }
}
2.GET 异步请求 BLOCK 形式 用 NSURLConnection 实现
#pragma mark --- get 异步请求 ---
- (IBAction)getTwo:(id)sender { self.allNewsArray = [[NSMutableArray alloc]init];
//url 地址
NSURL *url = [NSURL URLWithString:PATH];
//请求
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
//默认是 get 方法,如果是 get 方法可以不写
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {
if (data) {
NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options: error:nil];
//处理数据,用 model 存储
for (NSDictionary *dic1 in [dic objectForKey:@"news"]) {
NewsModel *model = [[NewsModel alloc]init];
[model setValuesForKeysWithDictionary:dic1];
[self.allNewsArray addObject:model];
}
} }];
}
3.POST 异步请求 BLOCK 形式:用 NSURLConnection 实现
#pragma mark --- POST 异步 Block 形式 ---
- (IBAction)POSTBlock:(id)sender { NSURL *URL = [NSURL URLWithString:@"http://ipad-bjwb.bjd.com.cn/DigitalPublication/publish/Handler/APINewsList.ashx"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:URL]; //制作包体
NSString *param = @"date=20131129&startRecord=1&len=5&udid=1234567890&terminalType=Iphone&cid=213"; NSData *data = [param dataUsingEncoding:NSUTF8StringEncoding]; //设置请求方式
[request setHTTPMethod:@"POST"];
//设置 body
[request setHTTPBody:data];
[request setTimeoutInterval:]; //建立连接.请求数据
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) { //解析数据
if (data) {
NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options: error:nil];
//处理数据,用 model 存储
for (NSDictionary *dic1 in [dic objectForKey:@"news"]) {
NewsModel *model = [[NewsModel alloc]init];
[model setValuesForKeysWithDictionary:dic1];
[self.allNewsArray addObject:model];
}
} }];
}
4.POST 异步请求 delegate 形式:用 NSURLConnection 实现
- (IBAction)POST_Delegate:(id)sender {
NSURL *URL = [NSURL URLWithString:@"http://ipad-bjwb.bjd.com.cn/DigitalPublication/publish/Handler/APINewsList.ashx"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:URL];
//制作包体
NSString *param = @"date=20131129&startRecord=1&len=5&udid=1234567890&terminalType=Iphone&cid=213";
NSData *data = [param dataUsingEncoding:NSUTF8StringEncoding];
//设置请求方式
[request setHTTPMethod:@"POST"];
//设置请求 body
[request setHTTPBody:data];
//建立连接请求数据
NSURLConnection *conn = [[NSURLConnection alloc]initWithRequest:request delegate:self];
//启动请求
[conn start];
}
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{
NSLog(@"接收到响应");
self.data = [NSMutableData data];
}
#pragma mark --- 接收数据的方法 ---
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{
[self.data appendData:data];
}
#pragma mark --- 结束传递数据 ---
- (void)connectionDidFinishLoading:(NSURLConnection *)connection{
NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:self.data options: error:nil];
NSLog(@"%@",dic);
}
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{
}
5.GET 异步请求 SESSION 写法
#pragma mark --- GET Session 写法 ---
- (IBAction)session:(id)sender { //创建 session 对象
NSURLSession *session = [NSURLSession sharedSession]; NSURL *URL = [NSURL URLWithString:PATH]; NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:URL]; NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) { if(data){
NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options: error:nil]; NSLog(@"%@",dic);
}
}]; //开始请求 (一定要调用)
[task resume];
}
6.POST 异步请求 BLOCK 形式:用 NSURLSession 实现
- (IBAction)POST_Session:(id)sender {
NSURL *URL = [NSURL URLWithString:@"http://ipad-bjwb.bjd.com.cn/DigitalPublication/publish/Handler/APINewsList.ashx"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:URL];
//制作包体
NSString *param = @"date=20131129&startRecord=1&len=5&udid=1234567890&terminalType=Iphone&cid=213";
NSData *data = [param dataUsingEncoding:NSUTF8StringEncoding];
//设置请求方式
[request setHTTPMethod:@"POST"];
//设置请求 body
[request setHTTPBody:data];
NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
NSLog(@"%@",error);
NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options: error:nil];
NSLog(@"%@",dic);
}];
[task resume];
}
iOS 网络编程的更多相关文章
- iOS网络编程模型
iOS网络编程层次结构也分为三层: Cocoa层:NSURL,Bonjour,Game Kit,WebKit Core Foundation层:基于 C 的 CFNetwork 和 CFNetServ ...
- IOS网络编程——第三方类库
IOS网络编程——第三方类库 目录 概述 ASIHttpRequest AFNetworking 其他 概述 ASIHttpRequest AFNetworking 其他
- IOS网络编程:HTTP
IOS网络编程:HTTP HTTP定义了一种在服务器和客户端之间传递数据的途径. URL定义了一种唯一标示资源在网络中位置的途径. REQUESTS 和 RESPONSES: 客户端先建立一个TCP连 ...
- iOS网络编程笔记——Socket编程
一.什么是Socket通信: Socket是网络上的两个程序,通过一个双向的通信连接,实现数据的交换.这个双向连路的一端称为socket.socket通常用来实现客户方和服务方的连接.socket是T ...
- 浅谈iOS网络编程之一入门
计算机网络,基本上可以抽象是端的通信.实际在通讯中会用到不同的设备,不同的硬件中,为了能友好的传输信息,那么建立一套规范就十分必要了.先来了解一些基本概念 了解网络中传输的都是二进制数据流. 2.了 ...
- iOS 网络编程:socket
@import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/c ...
- iOS 网络编程模式总结
IOS 可以采用三类api 接口进行网络编程,根据抽象层次从低到高分别为socket方式.stream方式.url 方式. 一 .socket 方式 IOS 提供的socket 方式的网络编程接口为C ...
- ios网络编程(入门级别)-- 基础知识
在学习ios的过程中,停留在UI控件很长时间,现在正在逐步的接触当中!!!!!!在这个过程中,小编学到了一些关于网络编程知识,并且有感而发,在此分享一下: 关于网络请求的重要性我想不用多说了吧!!!对 ...
- iOS 网络编程(HTTP协议)
HTTP协议的概念HTTP协议,Hyper Text Transfer Protocol (超文本传输协议)是用于从万维网服务器传送超文本到本地浏览器的传输协议,HTTP是一个应用层协议,由请求和响应 ...
- 从socket开始讲IOS网络编程
home list tags talk user rss Mac&iOS Socket 大纲 一.Socket简介 二.BSD Socket编程准备 1.地址 2.端口 3.网络字节序 4.半 ...
随机推荐
- [算法练习] UVA-10010-Where's Waldorf?
UVA Online Judge 题目10010 Where's Waldorf? Waldorf在哪? 问题描述: 给出一个m行n列的字符矩阵(),和一个单词列表,在矩阵上匹配每个单词.在矩阵上匹 ...
- backboneJs 导图
- 获得随机的n条结果行
* FROM [Menu] order by NEWID() * FROM [Menu]
- phpwind wap功能添加百度wap统计
百度推出wap统计功能后,及大的方便了个站长对wap网站的统计.PHPWIND自带的wap功能虽然说功能不是太强,但是对百度来说是非常友好的,如果再进一不优化一下页面模板,这样会对网友访问网站信息有非 ...
- Excel数据生成Sql语句的方法
选中想要生成的列,套用表格格式,选中表包含标题的选项确定,然后在最右边的一列第二行处,点击函数功能,选择CONCATENATE,在文本里输入想要的结构即可 代码如下 复制代码 ,=CONCATENA ...
- mysql定时脚本(event),类似oracle的job
mysql定时脚本(event),类似oracle的job 我有2张表:tb_push_data 和 tb_push_data_log 现在需要每隔一段时间将tb_push_data 符合条件的 ...
- C#——字符操作
题目要求:用户随机输入字母及数字组成的字符串,当用户连续输入字符串‘hello’时,程序结束用户输入,并分别显示用户输入的字母及数字的数目. 代码: using System; using Syste ...
- C#中Predicate<T>与Func<T, bool>泛型委托的用法实例
本文以实例形式分析了C#中Predicate<T>与Func<T, bool>泛型委托的用法,分享给大家供大家参考之用.具体如下: 先来看看下面的例子: 1 2 3 4 5 6 ...
- 暑假集训(4)第一弹 -----递推(Hdu2039)
题意梗概:fff团团员小A想退团了,不过要退团,他必须绘制出贤者法阵,以证明他有资格不受大fff之灵的监督 并退团,小A他现在要开始收集材料了,但是,他不清楚应该买多少份材料. 虽然你并不想帮他退团, ...
- MDM基于IOS设备管控功能的所有命令介绍
前面我们介绍了IOS上MDM几个简单的控制命令的发送和返回数据的解析处理,下面我们介绍一下MDM涉及到的命令的操作介绍: 一.Control Commands(控制类命令) 1.Device Lock ...