网络数据请求

1.同步:在同一个时间点,只可以做一件事情

2.异步:在同一个时间点,可以同时做多件事情

比较同步和异步

1.当下载的数据比较小的时候使用同步,反之使用异步

2.需要上传数据的时候使用异步,例如:上传图片

3.一般情况下(排除网速等物理环境影响),异步的效率比同步效率要高

1.使用NSString直接下载数据(同步)

1.拿到网址(字符串)

NSString *path = [NSString stringWithFormat:@"http://10.0.8.8/sns/my/user_list.php?page=%d&number=%d",1,20];

2.创建NSURL对象,url:统一资源标识符(统一资源定位器)

NSURL *url = [NSURL URLWithString:path];

3.使用NSString直接下载数据(同步) ,编码格式一般都用UTF-8

NSError *error;

NSString *string = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:&error];

if (error) { //如果error有值的话,代表报错 直接打印错误 否则 成功

NSLog(@"error:%@",error);

}else {

NSLog(@"string:%@",string);

}

2.使用NSURLConnection的同步方法下载数据

1.拿到网址路径

NSString *path = [NSString stringWithFormat:@"http://10.0.8.8/sns/my/user_list.php?page=%d&number=%d",1,20];

2.创建url对象

NSURL *url = [NSURL URLWithString:path];

3.获取请求对象,通过url对象得到请求对象

NSURLRequest *request = [NSURLRequest requestWithURL:url];

4.用NSURLConnection进行发送同步请求 获取NSData数据类型 记住:此方法在iOS9.0之后不支持了

NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];

5.JSON解析

NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];

NSLog(@"%@",dic);

3.使用NSURLConnection的异步方法下载数据

1.拿到网址路径

NSString *path = [NSString stringWithFormat:@"http://10.0.8.8/sns/my/user_list.php?page=%d&number=%d",1,20];

2.创建url对象

NSURL *url = [NSURL URLWithString:path];

3.获取请求对象

NSURLRequest *request = [NSURLRequest requestWithURL:url];

4.NSURLConnection发送异步请求

第一个参数:请求对象 第二个参数:代理

NSURLConnection *urlConnection = [[NSURLConnection alloc] initWithRequest:request delegate:self];

#pragma mark - NSURLConnectionDataDelegate - 协议方法  四种

遵循协议 实现协议中的方法

接收到响应 请求开始

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {

NSLog(@"接到响应,请求开始(请求成功)");

NSHTTPURLResponse *httpURLResponse = (NSHTTPURLResponse *)response;

//200:正常响应 404请求失败 400:客户端有问题 500:服务端有问题

//注意:服务端和客户端可以模拟(自定义)自己的状态码

if (httpURLResponse.statusCode == 200) {

NSLog(@"正常响应");

}else {

NSLog(@"请求有问题 %ld",httpURLResponse.statusCode);

}

//初始化成员变量_data

_data = [[NSMutableData alloc] init];

}

接收到数据,请求数据过程中 注意:这个过程是异步的,如果响应数据过大的话需要拼接data

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {

NSLog(@"接收数据过程中");

[_data appendData:data];

}

数据接收完毕后,结束请求响应

- (void)connectionDidFinishLoading:(NSURLConnection *)connection {

NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:_data options:NSJSONReadingMutableContainers error:nil];

NSLog(@"结束请求:%@",dic);

}

请求失败

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {

NSLog(@"错误:%@",error);

}

4.用NSURLSession的异步方法去下载数据 注意:NSURLSession是iOS7.0版本出现

1.拿到网址路径

NSString *path = [NSString stringWithFormat:@"http://10.0.8.8/sns/my/user_list.php?page=%d&number=%d",1,20];

2.创建url对象

NSURL *url = [NSURL URLWithString:path];

3.创建session单例对象 shared开头的单例对象

NSURLSession *session = [NSURLSession sharedSession];

4.创建任务

第一个参数是url对象 第二个参数是代码块(完成结果的代码块)

NSURLSessionDataTask *dataTask1 = [session dataTaskWithURL:url completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {

NSHTTPURLResponse *response1 = (NSHTTPURLResponse *)response;

NSLog(@"状态码:%ld",response1.statusCode);

NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];

NSLog(@"%@",dic);

}];

5.启动下载

[dataTask1 resume];

  6. 创建任务2

NSURLSessionDataTask *dataTask2 = [session dataTaskWithURL:[NSURL URLWithString:@"http://file.youboy.com/a/99/40/34/2/10043032.jpg"] completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {

NSLog(@"%@",data);

self.myImageView.image = [UIImage imageWithData:data];   //使用故事版拖出一个UIImageView 拖线(属性)命名为myImageView

}];

  7.启动下载

[dataTask2 resume];

了解

NSURLSessionDataTask 默认的样式 可以上传内容 ,上传完成后再进行下载

NSURLSessionUploadTask 主要用于上传数据使用,传完以后不会再下载返回结果

NSURLSessionDownloadTask 必须有下载数据

时间: 2024-10-12 20:49:48

网络数据请求的相关文章

网络数据请求-封装思想总结

1.  网络数据请求-封装请求 调用的开发者  1.创建这个网络对象(httpRequest) 2.在该ViewController类里遵循协议 3.实现协议中的方法 封装的开发者  1.根据NSURLConnection异步的方法进行封装, 创建url对象,保留delegate 最后发送异步请求  2.让封装的类遵循协议(NSURLConnectionDataDelegate)  3.让封装的类(QDLHttpRequest)去实现该协议中的方法(4个)

swift网络数据请求方法

搭建一个apache服务器,用php编写一个返回给客户端请求数据的脚本 1 <?php 2 // header("Content-type:text/html;charset=utf-8"); 3 header("Content-type:text/json;charset=utf-8"); 4 if (isset($_REQUEST['name'])) { 5 $result = $_REQUEST['name']; 6 $arr=array("r

iOS经验1:自己写的网络数据请求 第三方框架 断点续传 上传下载

镔哥哥做项目,一般的数据请求不管他多复杂,只要自己写好了请求,那么调用永远是那么的简单,那么我介绍一下 一:需要用到第三方框架AFNetworking,直接写在工程pch头文件里就行因为经常用到它,这在网上随便下载就行,最好用cocopod来下载,这样什么都有了,cocopod是什么,我就不说,博客上面有介绍. 开始啦: 1:自定义网络请求DataRequestManager类专门管理网络用的 朋友们以下代码就可以直接复制来用了 .h文件 //  DataRequestManager.h // 

安卓开发网络数据请求

1将访问的路径转换成URL. URL url = new URL(path); 2,通过URL获取连接. HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 3,设置请求方式 conn.setRequestMethod("GET"); 4,设置连接超时时间 conn.setConnectTimeout(5000); 5,设置读取时间 conn.setConnectTimeout(5000); 6,设置请求

Android利用tcpdump和wireshark抓取网络数据包

主要介绍如何利用tcpdump抓取andorid手机上网络数据请求,利用Wireshark可以清晰的查看到网络请求的各个过程包括三次握手,但相对来说使用Fiddler进行网络数据抓包和展现更方便,优点包括: (1)无需root (2)对Android和Iphone同样适用 (3)操作更简单方便(第一次安装配置,第二次只需设置代理即可) (4)数据包的查看更清晰易懂 (5) 可以查看https请求,建议使用Fillder,具体可见:利用Fiddler进行网络数据抓包. 1.下载并安装tcpdump

ReactNative: 数据请求

一.简介 数据,任何一款产品必不可少的核心,没有数据,一切就毫无根据可言.在开发中,数据基本上都需要从服务器去获取.ReactNative本身实现了网络API功能,它遵循浏览器的实现方式,也即XMLHTTPRequest API.参与前端开发的工程师,对XMLHTTPRequest应该非常了解,XMLHTTPRequest在Web中存在跨域问题,但在ReactNative中则不存在.当然也可以使用jquery中的Ajax库进行网络数据请求,Ajax的本质其实还是使用了XMLHttpRequest

iOS开发——网络编程OC篇&amp;数据请求总结

数据请求总结 1 //**************************************GET 2 //同步 3 /* 4 //第一步,创建URL 5 NSURL * url = [[NSURL alloc]initWithString:@"http://e.hiphotos.baidu.com/image/w%3D1366%3Bcrop%3D0%2C0%2C1366%2C768/sign=66f9b9980ef431adbcd2473a7d0097cc/08f790529822720

Android利用Fiddler进行网络数据抓包【怎么跟踪微信请求】

主要介绍Android及IPhone手机上如何利用Fiddler进行网络数据抓包,比如我们想抓某个应用(微博.微信.墨迹天气)的网络通信请求就可以利用这个方法. Mac 下请使用 Charles 代替 Fiddler. 相对于tcpdump配合wireshark抓包的优势在于:(1)无需root (2)对Android和Iphone同样适用 (3)操作更简单方便(第一次安装配置,第二次只需设置代理即可) (4)数据包的查看更清晰易懂,Fiddler的UI更简单明了 (5) 可以查看https请求

请求网络数据

package com.example.project2zhoukao1; import java.util.List;import java.util.concurrent.ExecutionException; import com.bwie.adapter.Mbaseadapter;import com.bwie.bean.JsondDataone;import com.bwie.bean.Jsonone;import com.google.gson.Gson; import androi