随意细解:UI -- 网络编程
来源:互联网 发布:nasa 太阳能辐射数据 编辑:程序博客网 时间:2024/06/01 14:32
网络编程
GET请求方式
同步请求
会造成程序的卡顿(只有当请求完成才会恢复对界面的操作,用户的体验太差)
宏定义网址
#define kSearchURL @"http://api.map.baidu.com/place/v2/search?query=麦当劳®ion=上海&output=json&ak=6E823f587c95f0148c19993539b99295"
把字符串的网址 转换成网址对象
注意:如果网址中有中文,需要转化格式// 注意:如果网址中有中文,需要转化格式NSString *newStr = [kSearchURL stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; // 把字符串的网址 转换成网址对象NSURL *url = [NSURL URLWithString:newStr];
创建一个请求
timeoutInterval请求超时的时间 秒为单位NSMutableURLRequest *URLRequest = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10];
设置一个请求的标示(这步很重要)
[URLRequest setHTTPMethod:@"get"];
利用请求创建一个链接
NSURLResponse *response = nil;// 建立同步链接,并得到返回的数据(data)NSData *data = [NSURLConnection sendSynchronousRequest:URLRequest returningResponse:&response error:nil];
JSON解析数据
注意数据类型,数组还是字典
NSMutableDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:(NSJSONReadingMutableContainers) error:nil];
异步请求
代理方法 异步请求
获取网址对象(有中文要转码)
NSString *urlStr = [kSearchURL stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
利用网址 创建网址对象
NSURL *url = [NSURL URLWithString:urlStr];
利用网址对象创建一个请求
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:(NSURLRequestUseProtocolCachePolicy) timeoutInterval:10];
标识请求类型
[request setHTTPMethod:@"Get"];
利用请求创建一个异步链接
定义属性 @property (nonatomic, retain) NSURLConnection *conn;self.conn = [NSURLConnection connectionWithRequest:request delegate:self];
开始链接
[self.conn start];
遵守协议
<NSURLConnectionDataDelegate, NSURLConnectionDelegate>
链接成功时,创建data
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{NSLog(@"已经接收到服务器的响应信息,链接成功");NSLog(@"%@", response);// 链接成功时,创建dataself.receiveData = [NSMutableData data];}
多次触发didReceiveData方法 才能接收到 完整的data,所以需要拼接一下data
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{[self.receiveData appendData:data];NSLog(@"接收到数据触发的方法");}
完成数据加载,解析数据
- (void)connectionDidFinishLoading:(NSURLConnection *)connection{ NSLog(@"%@", self.receiveData); NSLog(@"已经完成数据加载 触发的方法"); // 解析数据 NSMutableDictionary *dataDic = [NSJSONSerialization JSONObjectWithData:self.receiveData options:(NSJSONReadingMutableContainers) error:nil]; // 如果在tableView上展示的话 // 注意:要刷新界面}
请求失败触发的方法
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{NSLog(@"请求失败时触发 %@", error);}
block 异步请求
获取网址对象(有中文要转码)
NSString *urlStr = [kSearchURL stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
利用网址 创建网址对象
NSURL *url = [NSURL URLWithString:urlStr];
利用网址对象创建一个请求
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:(NSURLRequestUseProtocolCachePolicy) timeoutInterval:10];
标识请求类型
[request setHTTPMethod:@"Get"];
回到主线程
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) { // 可以对data进行JSON解析 // 当数据请求完成的时候 会指定这个block NSLog(@"%@", data); // 判断是否在主线程 NSLog(@"%d", [NSThread isMainThread]);}];
POST请求方式
POST同步
利用网址 创建网址对象
NSURL *url = [NSURL URLWithString:kSearchURL];
利用网址对象创建一个请求
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:(NSURLRequestUseProtocolCachePolicy) timeoutInterval:10];
标识请求类型
[request setHTTPMethod:@"POST"];
把字符串转化成data使用UTF- 8的编码格式(携带的请求体)
NSData *data = [kNewsListParam dataUsingEncoding:NSUTF8StringEncoding];
Post请求 携带一个请求体
[request setHTTPBody:data];
创建同步链接
NSData *newData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
解析数据
NSMutableDictionary *dataDic = [NSJSONSerialization JSONObjectWithData:newData options:(NSJSONReadingMutableContainers) error:nil];
POST异步
代理方法 异步请求
获取网址对象
定义宏 #define kNewsListURL 网址
NSURL *url = [NSURL URLWithString:kNewsListURL];
利用网址对象创建请求
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:(NSURLRequestUseProtocolCachePolicy) timeoutInterval:10];
设置请求标示符
[request setHTTPMethod:@"Post"];
给请求添加请求体
NSData *data = [kNewsListParam dataUsingEncoding:NSUTF8StringEncoding];[request setHTTPBody:data];
利用请求创建一个链接(异步代理方法)
self.conn = [NSURLConnection connectionWithRequest:request delegate:self];[self.conn start];
代理方法
参考Get代理方法的异步请求
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { self.receiveData = [NSMutableData data]; NSLog(@"%@", response); } - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { [self.receiveData appendData:data]; } - (void)connectionDidFinishLoading:(NSURLConnection *)connection { NSMutableDictionary *dataDic = [NSJSONSerialization JSONObjectWithData:self.receiveData options:(NSJSONReadingMutableContainers) error:nil]; } - (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error { NSLog(@"请求失败时触发 %@", error); }
block 异步请求
获取网址对象
定义宏 #define kNewsListURL 网址
NSURL *url = [NSURL URLWithString:kNewsListURL];
利用网址对象创建请求
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:(NSURLRequestUseProtocolCachePolicy) timeoutInterval:10];
设置请求标示符
[request setHTTPMethod:@"Post"];
给请求添加请求体
NSData *data = [kNewsListParam dataUsingEncoding:NSUTF8StringEncoding];[request setHTTPBody:data];
回到主线程
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) { // 可以对data进行JSON解析 // 当数据请求完成的时候 会指定这个block NSLog(@"%@", data); // 判断是否在主线程 NSLog(@"%d", [NSThread isMainThread]);}];
GET请求方式 和POST请求方法对比
相同点:都能给服务器传输数据。
不同点:
给服务器传输数据的⽅式:
GET:通过⺴址字符串。
POST:通过data传输数据的⼤⼩:
GET:⺴址字符串最多255字节。
POST:使⽤NSData,容量超过1G安全性:
GET:所有传输给服务器的数据,显⽰在⺴址⾥,类似于密码的明⽂输⼊,直接可⻅。
POST:数据被转成NSData(⼆进制数据),类似于密码的密⽂输⼊,⽆法直接读取。
服务器端PHP简单接⼝
PHP中使⽤不同的函数获取数据,⽀持不同的请求⽅式:
- GET请求:使⽤ $_GET[“key”] 获取数据⺴址中的数据
- POST请求:使⽤ $_POST[“key”] 获取上传data中的数据
- GET、POST请求:使⽤ $_REQUEST[“key”] 获取数据
- 随意细解:UI -- 网络编程
- 随意细解:UI -- 多线程编程
- 随意细解:UI -- 数据库
- 随意细解:UI -- 动画
- 随意细解:UI -- UIView及其子类
- 随意细解:UI -- 事件处理
- 随意细解:UI -- UISegmentedControl、UISlider
- 随意细解:UI -- UIScrollView、UIPageControl
- 随意细解:UI -- UINavigationController、界面通信
- 随意细解:UI -- UITableView表视图
- 随意细解:UI --UITableView编辑
- 随意细解:UI -- 自定义TableViewCell
- 随意细解:UI -- 标签视图控制器
- 随意细解:UI -- 可视化设计
- 随意细解:UI -- 数据结构解析
- 随意细解:UI -- 集合视图
- 随意细解:UI -- MVC、通知
- 随意细解:UI -- 基础视图、程序启动流程
- leetcode-- Intersection of Two Linked Lists -- 重点
- c-简单的计算器
- Market Guide for Cloud Access Security Brokers
- JS之This篇-菜鸟的福利
- Android基础之SharedPreferences
- 随意细解:UI -- 网络编程
- Eclipse的快捷键一览
- 日常学习
- FPGA自学之路1--软件没有USB Blaster选项
- 按钮OnClick实现的三种方法
- Effective c++ 条款32-37 重载,重写, 重定义
- 内存管理高级
- Gym 100499I (数学 模拟)
- duilib如何设置字体大小