iOS之网络编程
发送HTTP请求的方法
在HTTP/1.1协议中,定义了8种发送http请求的方法
GET、POST、OPTIONS、HEAD、PUT、DELETE、TRACE、CONNECT、PATCH
根据HTTP协议的设计初衷,不同的方法对资源有不同的操作方式
PUT :增
DELETE :删
POST:改
GET:查
最常用的是GET和POST(实际上GET和POST都能办到增删改查)
HTTP的通信过程
1.请求
1> 请求行 : 请求方法、请求路径、HTTP协议的版本
GET /6ONWsjip0QIZ8tyhnq/ps_default.gif?_t=1445499255720 HTTP/1.1
2> 请求头 : 客户端的一些描述信息
* User-Agent : 客户端的环境(软件环境)
User-Agent Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:41.0) Gecko/20100101 Firefox/41.0
3> 请求体 : POST请求才有这个东西
* 请求参数,发给服务器的数据
2.响应
1> 状态行(响应行): HTTP协议的版本、响应状态码、响应状态描述
HTTP/1.1 200 OK
2> 响应头:服务器的一些描述信息
* Content-Type : 服务器返回给客户端的内容类型
* Content-Length : 服务器返回给客户端的内容的长度(比如文件的大小)
3> 实体内容(响应体)
* 服务器返回给客户端具体的数据,比如文件数据
选择GET和POST的建议
如果要传递大量数据,比如文件上传,只能用POST请求
GET的安全性比POST要差些,如果包含机密\敏感信息,建议用POST
如果仅仅是索取数据(数据查询),建议使用GET
如果是增加、修改、删除数据,建议使用POST
如何发送一个POST请求
// 1.创建一个URL : 请求路径
NSURL *url = [NSURL URLWithString:@"http://localhost:8080/test/login"]; // 2.创建一个请求
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
// 设置请求方法
request.HTTPMethod = @"POST";
// 设置请求体 : 请求参数
NSString *param = [NSString stringWithFormat:@"username=%@&pwd=%@", usernameText, pwdText];
// NSString --> NSData
request.HTTPBody = [param dataUsingEncoding:NSUTF8StringEncoding];
URL转码
1.URL中不能包含中文,得对中文进行转码(加上%)
NSString *urlStr = [NSString stringWithFormat:@"http://localhost/login?username=喝喝&pwd=222"];
urlStr = [urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
// urlStr == @"http://localhost/login?username=%E5%96%9D%E5%96%9D&pwd=222"
NSURLConnection发送请求
同步请求
+ (NSData *)sendSynchronousRequest:(NSURLRequest *)request returningResponse:(NSURLResponse **)response error:(NSError **)error;
异步请求:根据对服务器返回数据的处理方式的不同,又可以分为2种
block回调
+ (void)sendAsynchronousRequest:(NSURLRequest*) request queue:(NSOperationQueue*) queue completionHandler:(void (^)(NSURLResponse* response, NSData* data, NSError* connectionError)) handler;
NSMutableURLRequest的常用方法
1.设置超时
request.timeoutInterval = 5;
iOS中发送HTTP请求的方案
苹果原生(自带)
NSURLConnection:用法简单,最经典最直接的一种方案
NSURLSession:iOS 7新出的技术,功能比NSURLConnection更加强大
CFNetwork:NSURL*的底层,纯C语言
第三方框架
ASIHttpRequest:外号“HTTP终结者”,功能极其强大,已停止更新
AFNetworking:简单易用,提供了基本够用的常用功能,维护和使用者多
MKNetworkKit:简单易用,维护和使用者少
iOS之网络编程的更多相关文章
- 聊聊iOS中网络编程长连接的那些事
1.长连接在iOS开发中的应用 常见的短连接应用场景:一般的App的网络请求都是基于Http1.0进行的,使用的是NSURLConnection.NSURLSession或者是AFNetworking ...
- IOS开发——网络编程总汇
关于IOS的网络编程,大家都会想到C实现的底层BSD ,CFNetwork和NSURL之类的库,虽然如今非常多第三方库非常方便,可是作为一名开发人员,也须要了解底层代码. 以下的思维导图是关于眼下开发 ...
- 【iOS】网络编程:上传图片到服务器
在网络编程中,如果需要上传图片,那么他的方法将会和普通的上传数据不同,下面将讲解如何上传图片. 环境信息: Mac OS X 10.9.5 Xcode 5.1.1 IOS 7.1 正文: - (NSU ...
- iOS:网络编程中三个数据解析协议HTTP、XML、JSON的详细介绍
网络编程:HTTP协议.XML数据协议.JSON数据协议: HTTP: 1.HTTP传输数据有四种方式:Get方式.Post方式.同步请求方式.异步请求方式. 说明:同步和异步请求方式在创建链接对象和 ...
- ios开发 网络编程浅析(一)
iphone包含了很多框架和库,从底层的套接字到不同层次的封装,可以方便地给程序添加网络功能. (1)BSD套接字.最底层的套接字,这是Unix网络开发常用的API.如果从其他系统移植程序,而程序用的 ...
- iOS开发——网络编程Swift篇&Alamofire详解
Alamofire详解 预览图 Swift Alamofire 简介 Alamofire是 Swift 语言的 HTTP 网络开发工具包,相当于Swift实现AFNetworking版本. 当然,AF ...
- iOS开发——网络编程Swift篇&(八)SwiftyJSON详解
SwiftyJSON详解 最近看了一些网络请求的例子,发现Swift在解析JSON数据时特别别扭,总是要写一大堆的downcast(as?)和可选(Optional),看?号都看花了.随后发现了这个库 ...
- iOS开发——网络编程OC篇&(一)XMPP简单介绍与准备
XMPP简单介绍与准备 一.即时通讯简单介绍 1.简单说明 即时通讯技术(IM)支持用户在线实时交谈.如果要发送一条信息,用户需要打开一个小窗口,以便让用户及其朋友在其中输入信息并让交谈双方都看到交谈 ...
- iOS开发——网络编程OC篇&Socket编程
Socket编程 一.网络各个协议:TCP/IP.SOCKET.HTTP等 网络七层由下往上分别为物理层.数据链路层.网络层.传输层.会话层.表示层和应用层. 其中物理层.数据链路层和网络层通常被称作 ...
- iOS开发——网络编程OC篇&使用WebView构建HyBird应用
使用WebView构建HyBird应用 HyBird是一种本地技术与Web相结合,能过实现跨平台的移动应用开发,最常用的一个框架:PhoneGap 一:首先,写好html代码 <!DOCTYPE ...
随机推荐
- Oracle odi 数据表导出到文件
最近新客户要求,以EXCEL数据方式,将数据表的内容,通过AS2协议传输到客户那边,本来打算使用存储过程直接输出EXCEL,但一想,ODI这么强大的工具应该可以直接进行转换,所以参考了一下官方标准文档 ...
- JqGrid的总结大全【转】
jqGrid整理 PS:JqGrid 官方 API 点我 我的笔记: 一. jqGrid的加载. 1.引用相关头文件 引入CSS: <link href="Scripts/jq ...
- [Q]自定义保存位置及文件名
以“DWG To PDF.pc3”打印为例: 说明:<DrawingDirectory> 当前图纸所在目录<DrawingFolderName> 当前图纸文件所在文件夹名称&l ...
- centos7安装mariadb后无法启动的问题
MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可.开发这个分支的原因之一是:甲骨文公司收购了MySQL后,有将MySQL闭源的潜在风险,因此社区采用分支的方 ...
- iOS 最新App提交上架流程及部分问题的解决方案2016.12.21,感谢原博主!!!
内容摘自http://www.cocoachina.com/bbs/3g/read.php?tid=330302,原博特别详细,下面我对部分地方进行了修改,主要是对在打包验证和上传的时候遇到的问题进行 ...
- redis cluster中添加删除重分配节点例子
redis cluster配置好,并运行一段时间后,我们想添加节点,或者删除节点,该怎么办呢. 一,redis cluster命令行 //集群(cluster) CLUSTER INFO 打 ...
- Scala文件操作
Scala中的文件操作基本可以依赖于Java的实现,包括输入.输出流的使用. object FileOps {def main(args: Array[String]) { val file = So ...
- 打开myeclipse2014的包资源管理器
网上查到的方法不太适用于myeclipse2014,我就自己试了一下下 结果是:windows->show view->general->project package 结果: 希望 ...
- how many different bst given n nodes?
Reference: http://stackoverflow.com/questions/3042412/with-n-no-of-nodes-how-many-different-binary-a ...
- Linux Date命令学习笔记
date 根据给定格式显示日期或设置系统日期时间.print or set the system date and time 指令所在路径:/bin/date 命令参数: 参数 描述 -d 显示字符串 ...