博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
IOS-网络(GET请求和POST请求、HTTP通信过程、请求超时、URL转码)
阅读量:7259 次
发布时间:2019-06-29

本文共 4890 字,大约阅读时间需要 16 分钟。

1 //  2 //  ViewController.m  3 //  IOS_0129_HTTP请求  4 //  5 //  Created by ma c on 16/1/29.  6 //  Copyright © 2016年 博文科技. All rights reserved.  7 //  8   9 #import "ViewController.h" 10 #import "MBProgressHUD+MJ.h" 11  12 @interface ViewController () 13 @property (weak, nonatomic) IBOutlet UITextField *textName; 14 @property (weak, nonatomic) IBOutlet UITextField *textPassword; 15  16 - (IBAction)btnlogin; 17  18 @end 19  20 @implementation ViewController 21  22 /* 23   24  1.发送HTTP请求的方法 25  1>在HTTP/1.1协议中,定义了8种发送HTTP请求的方法 26    GET,POST,OPTIONS,HEAD,PUT,DELETE,TRACE,CONNECT,PATCH 27  2>根据HTTP协议设计初衷,不同的方法对资源有不同的操作方式 28    PUT:增 29    DELETE:删 30    POST:改 31    GET:查 32  3>最常用的是GET,POST(实际上GET,POST都能办到增删改查) 33  4>参数 - 传递给服务器的具体数据 34   35  2.GET和POST对比 36  1>GET和POST主要体现在数据传递上 37    a.GET在请求URL后面以?的形式加上发送给服务器的参数,多个参数之间用&隔开 38    b.URL后面跟的参数不能超过1KB 39   40    c.POST发送给服务器的参数全部放在请求体中 41    d.理论上,POST传递的数据量没有限制(看服务器处理能力) 42   43  3.GET和POST选择 44  1>传递大量数据只能用POST(文件上传) 45  2>GET安全性比POST差,机密信息用POST 46  3>仅仅是索取数据(数据查询)用GET 47  4>如果是增删改查数据,建议用POST 48   49  4.HTTP通信过程 - 请求 50  1>HTTP协议规定:1个完整的由客户端发送给服务器的HTTP请求包含以下内容 51  a.请求行:包含了请求方法、请求资源路径、HTTP版本协议 52  b.请求头:包含了对客户端的环境描述、客户端请求的主机地址等 53    Host:客户端想访问的服务器主机地址 54    User-Agent:客户端类型,客户端的软件环境 55    Accept:客户端所能接收的数据类型 56    Accept-Language:客户端的语言环境 57    Accept-Encoding:客户端所支持的数据压缩格式 58   c.请求体:客户端发送给服务器的具体数据 59   60  5.HTTP通信过程 - 响应 61  1>客户端向服务器发送请求,服务器应当作出响应,即返回数据给客户端 62  2>HTTP协议规定:1个完整的HTTP响应中应该包含以下内容 63  a.状态行:包含了HTTP协议版本、状态码、状态英文名称 64  b.响应头:包含了对服务器的描述、对返回数据的描述 65    Server:服务器的类型 66    Content-Type:返回的数据类型 67    Content-Length:返回的数据长度 68    Date:响应的时间 69  3>实体内容:服务器返回给客户端的具体数据 70  4>常见响应状态码: 71  */ 72  73 - (void)viewDidLoad { 74     [super viewDidLoad]; 75      76     self.view.backgroundColor = [UIColor groupTableViewBackgroundColor]; 77 } 78  79 - (void)touchesBegan:(NSSet
*)touches withEvent:(UIEvent *)event 80 { 81 [self.view endEditing:YES]; 82 } 83 84 - (IBAction)btnlogin { 85 86 NSString *usernameText = self.textName.text; 87 if (usernameText.length == 0) { 88 [MBProgressHUD showError:@"请输入账号"]; 89 return; 90 } 91 self.textPassword.secureTextEntry = YES; 92 NSString *password = self.textPassword.text; 93 if (password.length == 0) { 94 [MBProgressHUD showError:@"请输入密码"]; 95 return; 96 } 97 //1.GET请求默认 98 // //创建一个NSURL:请求路径 99 // NSString *strURL = [NSString stringWithFormat:@"http://localhost:8080/MJServer/login?username=%@&pwd=%@",usernameText,password];100 101 // //NSURL后面不能包含中文,得对中文进行转码102 // strURL = [strURL stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];103 104 // NSURL *url = [NSURL URLWithString:strURL];105 // //创建一个请求106 // NSURLRequest *request = [NSURLRequest requestWithURL:url];107 108 // 增加蒙板109 [MBProgressHUD showMessage:@"正在拼命加载..."];110 111 //2.POST请求112 NSString *strURL = @"http://localhost:8080/MJServer/login";113 NSURL *url = [NSURL URLWithString:strURL];114 NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];115 116 //5s后请求超时(默认60s超时)117 request.timeoutInterval = 5;118 //设置请求方式119 request.HTTPMethod = @"POST";120 //设置请求头121 [request setValue:@"iPhone6" forHTTPHeaderField:@"User-Agent"];122 123 //设置请求体124 NSString *param = [NSString stringWithFormat:@"username=%@&pwd=%@",usernameText,password];125 //NSString -> NSData126 request.HTTPBody = [param dataUsingEncoding:NSUTF8StringEncoding];127 128 //异步请求129 [self sendAsyncWithRequest:request];130 131 }132 //异步请求133 - (void)sendAsyncWithRequest:(NSURLRequest *)request134 {135 NSOperationQueue *queue = [NSOperationQueue mainQueue];136 137 [NSURLConnection sendAsynchronousRequest:request queue:queue completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {138 139 //隐藏蒙版140 [MBProgressHUD hideHUD];141 NSHTTPURLResponse *resp = (NSHTTPURLResponse *)response;142 NSString *msg = [NSHTTPURLResponse localizedStringForStatusCode:resp.statusCode];143 NSLog(@"%ld %@ %@",resp.statusCode, msg, resp.allHeaderFields);144 145 //这个block会在请求完毕的时候自动调用146 if (connectionError || data == nil) {147 [MBProgressHUD showError:@"请求失败"];148 return;149 }150 //解析服务器返回的JSON数据151 NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:nil];152 NSString *error = dict[@"error"];153 if (error) {154 [MBProgressHUD showError:error];155 }156 else{157 NSString *success = dict[@"success"];158 [MBProgressHUD showSuccess:success];159 }160 }];161 }162 163 @end

 

转载地址:http://pzldm.baihongyu.com/

你可能感兴趣的文章
PHPStudy开启rewrite_module重写功能启用.htaccess
查看>>
IsRectEmpty与IsRectNull
查看>>
make.exe: *** [obj/local/armeabi-v7a/libtest.so] Error 1
查看>>
Splunk 预测2018年人工智能和机器学习的三大趋势
查看>>
webluker刷新缓存-php版
查看>>
用saltstack cp模块实现文件管理
查看>>
HTML 快速入门
查看>>
Linux系统密钥验证(附件有实验过程和截图)
查看>>
HDEL key field [field ...]
查看>>
dockerfile介绍与实例演示
查看>>
ceph-depoly 部署ceph 集群
查看>>
Jquery 中each循环嵌套的使用示例教程
查看>>
Windows7+VS2012下OpenGL 4的环境配置
查看>>
安全基础-A
查看>>
定义JavaScript类:工厂模式、构造函数模式、原型模式、构造函数原型模式、动态原型模式...
查看>>
zabbix修改Template OS Linux模版使已使用内存(Used memory)更准确
查看>>
OpenStack CEPH Liberty 统一存储 bug解决
查看>>
NAT总结
查看>>
Java-P:对象创建
查看>>
Oracle中的 timestamp 和 timestamp with time zone, timestamp with local time zone
查看>>