//
// 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转码)的更多相关文章

  1. 二:网络--GET请求和POST请求

    一.GET请求和POST请求简单说明 GET - 从指定的服务器中获取数据 POST - 提交数据给指定的服务器处理 GET方法: 使用GET方法时,查询字符串(键值对)被附加在URL地址后面一起发送 ...

  2. IOS网络第五天 AFN-01发送get和post请求

    ************AFN01-基本使用 #import "HMViewController.h" #import "AFNetworking.h" @in ...

  3. iOS开发——网络篇——HTTP/NSURLConnection(请求、响应)、http响应状态码大全

    一.网络基础 1.基本概念> 为什么要学习网络编程在移动互联网时代,移动应用的特征有几乎所有应用都需要用到网络,比如QQ.微博.网易新闻.优酷.百度地图只有通过网络跟外界进行数据交互.数据更新, ...

  4. iOS网络协议 HTTP/TCP/IP浅析

    一.TCP/IP协议       话说两台电脑要通讯就必须遵守共同的规则,就好比两个人要沟通就必须使用共同的语言一样.一个只懂英语的人,和一个只懂中文的人由于没有共同的语言(规则)就没办法沟通.两台电 ...

  5. iOS基础 - iOS网络基础

    一.网络访问的四个步骤 l 第一步:确定地址URL l 第二步:建立请求 l 第三步:建立并启动连接 l 第四步:连接完成,处理结果 备注:URL,统一资源定位符(URL,英语Uniform Reso ...

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

    iOS开发网络篇—GET请求和POST请求 一.GET请求和POST请求简单说明 创建GET请求 // 1.设置请求路径 NSString *urlStr=[NSString stringWithFo ...

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

    一.GET请求和POST请求简单说明 创建GET请求 1 // 1.设置请求路径 2 NSString *urlStr=[NSString stringWithFormat:@"http:/ ...

  8. iOS开发网络篇—GET请求和POST请求的说明与比较

    1.GET请求和POST请求简单说明 1.1 创建GET请求 // 1.设置请求路径 NSString *urlStr = [NSString stringWithFormat:@"http ...

  9. iOS网络开发—POST请求和GET请求

    创建GET请求: // 1.设置请求路径 NSString *urlStr=[NSString stringWithFormat:@"http://192.168.1.53:8080/MJS ...

随机推荐

  1. Django - ORM - 进阶

    一.多表操作 创建模型 实例:我们来假定下面这些概念,字段和关系 作者模型:一个作者有姓名和年龄. 作者详细模型:把作者的详情放到详情表,包含生日,手机号,家庭住址等信息.作者详情模型和作者模型之间是 ...

  2. timedatectl — Control the system time and date

    timedatectl --help 的执行结果如下: timedatectl [OPTIONS...] COMMAND ... Query or change system time and dat ...

  3. Air Raid---hdu1151(最小路径覆盖)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1151 最小路径覆盖 == 顶点数 - 最大匹配. #include<stdio.h> #i ...

  4. oracle(十一) scn

    SCN(System Chang Number)作为oracle中的一个重要机制,在数据恢复.Data Guard.Streams复制.RAC节点间的同步等各个功能中起着重要作用. 理解SCN的运作机 ...

  5. 利用 TestNG 并行执行用例

    原文地址https://testerhome.com/topics/1639 一.测试类*注1 package com.testerhome; import io.appium.java_client ...

  6. 【转载】open-falcon部署

    运维监控系统之Open-Falcon   一.Open-Falcon介绍 1.监控系统,可以从运营级别(基本配置即可),以及应用级别(二次开发,通过端口进行日志上报),对服务器.操作系统.中间件.应用 ...

  7. Python笔记 #18# Pandas: Grouping

    10 Minutes to pandas 引 By “group by” we are referring to a process involving one or more of the foll ...

  8. bzoj3629 / P4397 [JLOI2014]聪明的燕姿

    P4397 [JLOI2014]聪明的燕姿 根据唯一分解定理 $n=q_{1}^{p_{1}}*q_{2}^{p_{2}}*q_{3}^{p_{3}}*......*q_{m}^{p_{m}}$ 而$ ...

  9. P4099 [HEOI2013]SAO(树形dp)

    P4099 [HEOI2013]SAO 我们设$f[u][k]$表示以拓扑序编号为$k$的点$u$,以$u$为根的子树中的元素所组成的序列方案数 蓝后我们在找一个以$v$为根的子树. 我们的任务就是在 ...

  10. Mac下将C程序创建为动态链接库再由另一个C程序调用

    写C的时候需要调用之前的一个C程序,想用动态链接库的方式.Mac下的动态链接库是dylib,与Linux下的.os或Windows下的.dll不同.由于之前没有接触过,所以翻了大量的博客,然而在编译过 ...