GET&POST
GET和POST是两种最常用的与服务器进行交互的HTTP方法
GET
语意是获取指定URL的资源。
将数据按照variable=value的形式,添加到action所指向的URL后面,并且两者只用“?”连接,各变量之间使用“&”连接。
貌似不安全,因为在传输过程中,数据被放在请求的URL中。
传输的数据量小,这主要是因为受URL长度限制。
POST
POST的语意说向指定URL的资源添加数据。
将数据放在数据体中,按照变量和值相对应的方式,传递到action所指向URL。
所有数据对用户来说不可见。
可以传输大量数据,上传文件只能使用POST。
GET请求示例
http://localhost//login.php?username=zhangsan&password = zhang
localhost:本地主机
ogin.php:资源名称
语意:从本地主机的login.php资源获取(操作)指定用户名和密码的登陆情况。
POST请求示例
http://localhost/login.php
localhost:本地主机
/login.php:资源名称
语义:向本地主机的login.php资源添加用户名和密码,并获得登陆情况。
提示:用户名和密码包装在网络请求的数据体中,在URL中不可见.
在浏览器中判断GET&POST请求
因为POST请求会向服务器发送数据体,因此在刷新页面时会出现提示窗口。
而GET请求不会向服务器发送数据体,因此没有提示。
从请求的本质而言,GET请求要比POST请求更安全,效率更高。
利用Firebug轻松查看POST请求的内容
开发网络应用时,用浏览器跟踪URL的返回结果是开发的重要辅助手段。
iOS网络发送请求的步骤
1.实例化URL(网络资源)
2.根据URL建立URLRequest(网络请求)
默认为GET请求
对于POST请求,需要创建请求的数据体。
3.利用URLConnection发送网络请求(建立连接)。
4.获得结果
NSURLConnection提供了两个静态方法可以直接同步或异步的方式向服务器发送网络请求。
同步请求
sendSynchronousRequest:returningResponse:error:
异步请求:
sendAsynchronousRequest:queue:completionHandler:
网络传输之二进制数据流
在网络请求过程中,接受数据的过程实际上是通过
NSURLConnectionDataDelegate来实现的,常用代理方法包括:
服务器开始返回数据,准备工作 - (void)connection:didReceiveResponse: 收到服务器返回的数据(本方法会被调用多次) - (void)connection:didReceiveData: 数据接收完毕,做数据的最后处理 - (void)connectionDidFinishLoading: 网络连接错误 - (void)connection:didFailWithError: 让NSURLConnectionDataDelegate异步执行 [connection setDelegateQueue:[NSOperationQueue alloc] init]
使用代理的优缺点
缺点:
代理方法多,比较分散。
要处理一个请求,需要在很多地方编写代码。
不利于逻辑实现、代码编写、调试、维护以及扩展。
尤其当存在多个请求会变得非常麻烦。
优点:
下载较大文件时,代理的作用将无可替代。
将数据写入文件
//1.打开文件 NSFileHandle *fp = [NSFileHandle fileHandleForWritingAtPath:self.downloadPath]; //2.如果文件不存在 if (fp == nil){ //直接将数据写入文件 [data writeToFile:self.down.downloadPath atomically:YES]; }else{ //如果文件已经存在,移动到文件末尾 [fp seekToEndOfFile]; //追加数据文件 [fp writeData:data]; //关闭文件 [fp closeFile]; }