IOS-网络(GET请求和POST请求、HTTP通信过程、请求超时、URL转码)
//
// ViewController.m
// IOS_0129_HTTP请求
//
// Created by ma c on 16/1/29.
// Copyright © 2016年 博文科技. All rights reserved.
// #import "ViewController.h"
#import "MBProgressHUD+MJ.h" @interface ViewController ()
@property (weak, nonatomic) IBOutlet UITextField *textName;
@property (weak, nonatomic) IBOutlet UITextField *textPassword; - (IBAction)btnlogin; @end @implementation ViewController /* 1.发送HTTP请求的方法
1>在HTTP/1.1协议中,定义了8种发送HTTP请求的方法
GET,POST,OPTIONS,HEAD,PUT,DELETE,TRACE,CONNECT,PATCH
2>根据HTTP协议设计初衷,不同的方法对资源有不同的操作方式
PUT:增
DELETE:删
POST:改
GET:查
3>最常用的是GET,POST(实际上GET,POST都能办到增删改查)
4>参数 - 传递给服务器的具体数据 2.GET和POST对比
1>GET和POST主要体现在数据传递上
a.GET在请求URL后面以?的形式加上发送给服务器的参数,多个参数之间用&隔开
b.URL后面跟的参数不能超过1KB c.POST发送给服务器的参数全部放在请求体中
d.理论上,POST传递的数据量没有限制(看服务器处理能力) 3.GET和POST选择
1>传递大量数据只能用POST(文件上传)
2>GET安全性比POST差,机密信息用POST
3>仅仅是索取数据(数据查询)用GET
4>如果是增删改查数据,建议用POST 4.HTTP通信过程 - 请求
1>HTTP协议规定:1个完整的由客户端发送给服务器的HTTP请求包含以下内容
a.请求行:包含了请求方法、请求资源路径、HTTP版本协议
b.请求头:包含了对客户端的环境描述、客户端请求的主机地址等
Host:客户端想访问的服务器主机地址
User-Agent:客户端类型,客户端的软件环境
Accept:客户端所能接收的数据类型
Accept-Language:客户端的语言环境
Accept-Encoding:客户端所支持的数据压缩格式
c.请求体:客户端发送给服务器的具体数据 5.HTTP通信过程 - 响应
1>客户端向服务器发送请求,服务器应当作出响应,即返回数据给客户端
2>HTTP协议规定:1个完整的HTTP响应中应该包含以下内容
a.状态行:包含了HTTP协议版本、状态码、状态英文名称
b.响应头:包含了对服务器的描述、对返回数据的描述
Server:服务器的类型
Content-Type:返回的数据类型
Content-Length:返回的数据长度
Date:响应的时间
3>实体内容:服务器返回给客户端的具体数据
4>常见响应状态码:
*/ - (void)viewDidLoad {
[super viewDidLoad]; self.view.backgroundColor = [UIColor groupTableViewBackgroundColor];
} - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
[self.view endEditing:YES];
} - (IBAction)btnlogin { NSString *usernameText = self.textName.text;
if (usernameText.length == ) {
[MBProgressHUD showError:@"请输入账号"];
return;
}
self.textPassword.secureTextEntry = YES;
NSString *password = self.textPassword.text;
if (password.length == ) {
[MBProgressHUD showError:@"请输入密码"];
return;
}
//1.GET请求默认
// //创建一个NSURL:请求路径
// NSString *strURL = [NSString stringWithFormat:@"http://localhost:8080/MJServer/login?username=%@&pwd=%@",usernameText,password]; // //NSURL后面不能包含中文,得对中文进行转码
// strURL = [strURL stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; // NSURL *url = [NSURL URLWithString:strURL];
// //创建一个请求
// NSURLRequest *request = [NSURLRequest requestWithURL:url]; // 增加蒙板
[MBProgressHUD showMessage:@"正在拼命加载..."]; //2.POST请求
NSString *strURL = @"http://localhost:8080/MJServer/login";
NSURL *url = [NSURL URLWithString:strURL];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; //5s后请求超时(默认60s超时)
request.timeoutInterval = ;
//设置请求方式
request.HTTPMethod = @"POST";
//设置请求头
[request setValue:@"iPhone6" forHTTPHeaderField:@"User-Agent"]; //设置请求体
NSString *param = [NSString stringWithFormat:@"username=%@&pwd=%@",usernameText,password];
//NSString -> NSData
request.HTTPBody = [param dataUsingEncoding:NSUTF8StringEncoding]; //异步请求
[self sendAsyncWithRequest:request]; }
//异步请求
- (void)sendAsyncWithRequest:(NSURLRequest *)request
{
NSOperationQueue *queue = [NSOperationQueue mainQueue]; [NSURLConnection sendAsynchronousRequest:request queue:queue completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) { //隐藏蒙版
[MBProgressHUD hideHUD];
NSHTTPURLResponse *resp = (NSHTTPURLResponse *)response;
NSString *msg = [NSHTTPURLResponse localizedStringForStatusCode:resp.statusCode];
NSLog(@"%ld %@ %@",resp.statusCode, msg, resp.allHeaderFields); //这个block会在请求完毕的时候自动调用
if (connectionError || data == nil) {
[MBProgressHUD showError:@"请求失败"];
return;
}
//解析服务器返回的JSON数据
NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:nil];
NSString *error = dict[@"error"];
if (error) {
[MBProgressHUD showError:error];
}
else{
NSString *success = dict[@"success"];
[MBProgressHUD showSuccess:success];
}
}];
} @end
IOS-网络(GET请求和POST请求、HTTP通信过程、请求超时、URL转码)的更多相关文章
- 二:网络--GET请求和POST请求
一.GET请求和POST请求简单说明 GET - 从指定的服务器中获取数据 POST - 提交数据给指定的服务器处理 GET方法: 使用GET方法时,查询字符串(键值对)被附加在URL地址后面一起发送 ...
- IOS网络第五天 AFN-01发送get和post请求
************AFN01-基本使用 #import "HMViewController.h" #import "AFNetworking.h" @in ...
- iOS开发——网络篇——HTTP/NSURLConnection(请求、响应)、http响应状态码大全
一.网络基础 1.基本概念> 为什么要学习网络编程在移动互联网时代,移动应用的特征有几乎所有应用都需要用到网络,比如QQ.微博.网易新闻.优酷.百度地图只有通过网络跟外界进行数据交互.数据更新, ...
- iOS网络协议 HTTP/TCP/IP浅析
一.TCP/IP协议 话说两台电脑要通讯就必须遵守共同的规则,就好比两个人要沟通就必须使用共同的语言一样.一个只懂英语的人,和一个只懂中文的人由于没有共同的语言(规则)就没办法沟通.两台电 ...
- iOS基础 - iOS网络基础
一.网络访问的四个步骤 l 第一步:确定地址URL l 第二步:建立请求 l 第三步:建立并启动连接 l 第四步:连接完成,处理结果 备注:URL,统一资源定位符(URL,英语Uniform Reso ...
- iOS开发网络篇—GET请求和POST请求
iOS开发网络篇—GET请求和POST请求 一.GET请求和POST请求简单说明 创建GET请求 // 1.设置请求路径 NSString *urlStr=[NSString stringWithFo ...
- iOS开发网络篇—GET请求和POST请求(转)
一.GET请求和POST请求简单说明 创建GET请求 1 // 1.设置请求路径 2 NSString *urlStr=[NSString stringWithFormat:@"http:/ ...
- iOS开发网络篇—GET请求和POST请求的说明与比较
1.GET请求和POST请求简单说明 1.1 创建GET请求 // 1.设置请求路径 NSString *urlStr = [NSString stringWithFormat:@"http ...
- iOS网络开发—POST请求和GET请求
创建GET请求: // 1.设置请求路径 NSString *urlStr=[NSString stringWithFormat:@"http://192.168.1.53:8080/MJS ...
随机推荐
- Spring 依赖注入 基于构造函数、设值函数、内部Beans、集合注入
Spring 基于构造函数的依赖注入_w3cschool https://www.w3cschool.cn/wkspring/t7n41mm7.html Spring 基于构造函数的依赖注入 当容器调 ...
- Python开发【Django】:日志记录、API认证
日志记录: 调用同一个对象,分别记录错误日志和运行日志 自定义日志类: class Logger(object): __instance = None def __init__(self): self ...
- 【Javascript】Windows下Node.js与npm的安装与配置
1:先下载Node.js,网站https://nodejs.org/en/,左侧为稳定版,右侧为最新版,推荐稳定版 2:Node.js安装,运行下载后的.msi文件,一路下一步就可以了,我选择的安 ...
- python模块之shutil高级文件操作
简介 shutil模块提供了大量的文件的高级操作.特别针对文件拷贝和删除,主要功能为目录和文件操作以及压缩操作.对单个文件的操作也可参见os模块. 注意即便是更高级别的文件复制函数(shutil.co ...
- 77. Combinations(回溯)
Given two integers n and k, return all possible combinations of k numbers out of 1 ... n. Example: I ...
- poj1329 Circle Through Three Points
地址:http://poj.org/problem?id=1329 题目: Circle Through Three Points Time Limit: 1000MS Memory Limit: ...
- Vue学习笔记之Vue知识点补充
0x00 修饰符 .lazy 在默认情况下,v-model 在每次 input 事件触发后将输入框的值与数据进行同步 .你可以添加 lazy 修饰符,从而转变为使用 change 事件进行同步: &l ...
- UVA10529 Dumb Bones
UVA10529 Dumb Bones go to solution 设$f[i]$表示叠$i$个的骨牌的期望 $O(n)$做法 #include<iostream> #include&l ...
- 20145118 《Java程序设计》 实验报告一
实验一 JAVA开发环境的熟悉(LINUX + ECLIPSE) 实验内容 1.使用JDK编译.运行简单的Java程序: 2.使用Eclipse 编辑.编译.运行.调试Java程序. 3.统计自己的P ...
- 20145211《网络对抗》逆向及BOF基础实践
逆向及BOF基础实践——又是一年梅落时 一.实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串. ...