IOS-网络(GET请求和POST请求、HTTP通信过程、请求超时、URL转码)

  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<UITouch *> *)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 -> NSData
126     request.HTTPBody = [param dataUsingEncoding:NSUTF8StringEncoding];
127
128     //异步请求
129     [self sendAsyncWithRequest:request];
130
131 }
132 //异步请求
133 - (void)sendAsyncWithRequest:(NSURLRequest *)request
134 {
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
时间: 2024-10-13 12:06:27

IOS-网络(GET请求和POST请求、HTTP通信过程、请求超时、URL转码)的相关文章

iOS网络篇4-利用NSURLConnection实现GET/POST/HEAD请求

iOS 开发中,我们可以利用NSURLConnection实现GET/POST请求 一.NSURLConnection三种请求方式 1.发送同步请求(返回NSData数据) [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:nil]; 在当前线程执行,返回NSData数据 2.发送异步请求(利用block) [NSURLConnection sendAsynchronousReque

iOS网络协议----HTTP/TCP/IP浅析

一.TCP/IP协议 话说两台电脑要通讯就必须遵守共同的规则,就好比两个人要沟通就必须使用共同的语言一样.一个只懂英语的人,和一个只懂中文的人由于没有共同的语言(规则)就没办法沟通.两台电脑之间进行通讯所共同遵守的规则,就是网络协议. 那么谁来制定这个网络协议? 国际标准化组织(ISO)定义了网络协议的基本框架,被称为OSI模型.要制定通讯规则,内容会很多,比如要考虑A电脑如何找到B电脑,A电脑在发送信息 给B电脑时是否需要B电脑进行反馈,A电脑传送给B电脑的数据的格式又是怎样的?内容太多太杂,

iOS网络协议篇

iOS开发网络篇-HTTP协议 说明:apache tomcat服务器必须占用8080端口 一.URL 1.基本介绍 URL的全称是Uniform Resource Locator(统一资源定位符) 通过1个URL,能找到互联网上唯一的1个资源 URL就是资源的地址.位置,互联网上的每个资源都有一个唯一的URL 2.URL中常见的协议 (1)HTTP 超文本传输协议,访问的是远程的网络资源,格式是http:// http协议是在网络开发中最常用的协议 (2)file 访问的是本地计算机上的资源,

iOS网络编程开发—HTTP协议

iOS网络编程开发—HTTP协议 说明:apache tomcat服务器必须占用8080端口 一.URL 1.基本介绍 URL的全称是Uniform Resource Locator(统一资源定位符) 通过1个URL,能找到互联网上唯一的1个资源 URL就是资源的地址.位置,互联网上的每个资源都有一个唯一的URL 2.URL中常见的协议 (1)HTTP 超文本传输协议,访问的是远程的网络资源,格式是http:// http协议是在网络开发中最常用的协议 (2)file 访问的是本地计算机上的资源

iOS网络篇2-http协议通信规则

超文本传送协议 (HTTP-Hypertext transfer protocol) 定义了客户端与服务器之间通信的传输规则.目前最新的版本是1.1,HTTP是一个应用层协议,由请求和响应构成,是一个标准的客户端服务器模型. 一.特点: 1.支持客户/服务器模式.支持基本认证 和安全认证. 2. 简单快速:客户向服务器请求服务时,只需传送请求方法和路径.请求方法常用的有GET.HEAD.POST.每种方法规定了客户与服务器联系的类型不同.由于HTTP协议简单,使得HTTP服务器的程序规模小,因而

HTTP/NSURLConnection(请求、响应)、http响应状态码大全

一.网络基础 1.基本概念> 为什么要学习网络编程在移动互联网时代,移动应用的特征有几乎所有应用都需要用到网络,比如QQ.微博.网易新闻.优酷.百度地图只有通过网络跟外界进行数据交互.数据更新,应用才能保持新鲜.活力如果没有了网络,也就缺少了数据变化,无论外观多么华丽,终将变成一潭死水 移动网络应用 = 良好的UI + 良好的用户体验 + 实时更新的数据新闻:网易新闻.新浪新闻.搜狐新闻.腾讯新闻视频:优酷.百度视频.搜狐视频.爱奇艺视频音乐:QQ音乐.百度音乐.酷狗音乐.酷我音乐LBS:百度地

iOS开发网络篇—GET请求和POST请求

iOS开发网络篇—GET请求和POST请求 一.GET请求和POST请求简单说明 创建GET请求 1 // 1.设置请求路径 2 NSString *urlStr=[NSString stringWithFormat:@"http://192.168.1.53:8080/MJServer/login?username=%@&pwd=%@",self.username.text,self.pwd.text]; 3 NSURL *url=[NSURL URLWithString:u

iOS网络编程开发GET请求和POST请求

iOS网络编程开发GET请求和POST请求 一.GET请求和POST请求简单说明 创建GET请求 // 1.设置请求路径 NSString *urlStr=[NSString stringWithFormat:@"http://192.168.1.53:8080/MJServer/login?username=%@&pwd=%@",self.username.text,self.pwd.text]; NSURL *url=[NSURL URLWithString:urlStr]

iOS开发网络篇—GET请求和POST请求(转)

一.GET请求和POST请求简单说明 创建GET请求 1 // 1.设置请求路径 2 NSString *urlStr=[NSString stringWithFormat:@"http://192.168.1.53:8080/MJServer/login?username=%@&pwd=%@",self.username.text,self.pwd.text]; 3 NSURL *url=[NSURL URLWithString:urlStr]; 4 5 // 2.创建请求对