设为首页 加入收藏

TOP

HTTP和GET/POST请求(NSURLConnection)(一)
2017-10-13 10:23:00 】 浏览:8734
Tags:HTTP GET/POST 请求 NSURLConnection

  • 网络编程
  • 网络编程是一种实时更新应用数据的常用手段
  • 网络编程是开发优秀网络应用的前提和基础

  • 网络基本概念
  • 客户端(就是手机或者ipad等手持设备上面的APP)
  • 服务器(远程服务器-本地服务器)
  • 请求(客户端索要数据的方式)
  • 响应(需要客户端解析数据)
  • 数据库(服务器的数据从哪里来)

HTTP


URL

  • 如何找到服务器(通过一个唯一的URL)
  • URL介绍
  • 统一资源定位符
  • url格式(协议\主机地址\路径)
    • 协议:不同的协议,代表着不同的资源查找方式、资源传输方式
    • 主机地址:存放资源的主机(服务器)的IP地址(域名)
    • 路径:资源在主机(服务器)中的具体位置
  • 请求协议
  • 【file】访问的是本地计算机上的资源,格式是file://(不用加主机地址)
  • 【ftp】访问的是共享主机的文件资源,格式是ftp://
  • 【mailto】访问的是电子邮件地址,格式是mailto:
  • 【http】超文本传输协议,访问的是远程的网络资源,格式是http://(网络请求中最常用的协议)

HTTP协议

  • 简介
  • a.超文本传输协议
  • b.规定客户端和服务器之间的数据传输格式
  • c.让客户端和服务器能有效地进行数据沟通

  • 优缺点
  • a.简单快速(协议简单,服务器端程序规模小,通信速度快)
  • b.灵活(允许传输各种数据)
  • c.非持续性连接(1.1之前版本是非持续的,即限制每次连接只处理一个请求,服务器对客户端的请求做出响应后,马上断开连接,这种方式可以节省传输时间)
  • 基本通信过程
  • a.请求:客户端向服务器索要数据
  • b.响应:服务器返回客户端相应的数据

GET和POST请求


  • HTTP里面发送请求的方法
  • GET(常用)、POST(常用)、OPTIONS、HEAD、PUT、DELETE、TRACE、CONNECT、PATCH

  • GET和POST请求的对比【区别在于参数如何传递】
  • GET
    • 在请求URL后面以?的形式跟上发给服务器的参数,多个参数之间用&隔开,比如
      http://www.test.com/login?username=123&pwd=234&type=JSON
    • 由于浏览器和服务器对URL长度有限制,因此在URL后面附带的参数是有限制的,通常不能超过1KB
  • POST
    • 发给服务器的参数全部放在请求体中
    • 理论上,POST传递的数据量没有限制(具体还得看服务器的处理能力)
  • 如何选择【除简单数据查询外,其它的一律使用POST请求】
  • a.如果要传递大量数据,比如文件上传,只能用POST请求
  • b.GET的安全性比POST要差些,如果包含机密\敏感信息,建议用POST
  • c.如果仅仅是索取数据(数据查询),建议使用GET
  • d.如果是增加、修改、删除数据,建议使用POST

iOS中发送HTTP请求的方案

苹果原生 特点
NSURLConnection 03年推出的古老技术
NSURLSession 13年推出iOS7之后,以取代NSURLConnection 【重点】
CFNetwork 底层技术、C语言

常用第三方框架

第三方框架
ASIHttpRequest
AFNetworking 开发常用
MKNetworkKit

HTTP请求通信过程

  • 请求
  • 【包括请求头+请求体·非必选】
  • 响应
  • 【响应头+响应体】
  • 通信过程
  • a.发送请求的时候把请求头和请求体(请求体是非必须的)包装成一个请求对象
  • b.服务器端对请求进行响应,在响应信息中包含响应头和响应体,响应信息是对服务器端的描述,具体的信息放在响应体中传递给客户端
  • 状态码
  • 【200】:请求成功
  • 【400】:客户端请求的语法错误,服务器无法解析
  • 【404】:无法找到资源
  • 【500】:服务器内部错误,无法完成请求

NSURLConnection使用


NSURLConnection同步请求(GET)

步骤

1 确定请求路径
2 创建请求对象(默认是GET请求,且已经默认包含了请求头)
3 使用NSURLSession sendsync方法发送网络请求
4 接收到服务器的响应后,解析响应体

代码


    // 1.确定路径
    NSURL *url = [NSURL URLWithString:@"http://m.news.baidu.com/news?fr=mohome&ssid=0&from=1001703a&uid=&pu=sz%401320_1001%2Cta%40iphone_2_5.0_3_537&bd_page_type=1"];

    // 2.创建请求对象
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    
    // 3.发送同步请求
    NSURLResponse *response = nil;
    NSError *error = nil;
    
    // sendSynchronousRequest阻塞式的方法,会卡住线程
    /*
     第一个参数:请求对象
     第二个参数:响应头信息,当该方法执行完毕之后,该参数被赋值
     第三个参数:错误信息,如果请求失败,则error有值
     */
    NSData *date = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
    
    // 4.解析服务器返回的数据
    NSString *string = [[NSString alloc] initWithData:date encoding:NSUTF8StringEncoding];

NSURLConnection异步请求(GET-SendAsync)

说明

该方法不会卡住当前线程,网络请求任务是异步执行的

代码

    // 1.确定路径
    NSURL *url = [NSURL URLWithString:@"http://m.news.baidu.com/news?fr=mohome&ssid=0&from=1001703a&uid=&pu=sz%401320_1001%2Cta%40iphone_2_5.0_3_537&bd_page_type=1"];

    // 2.创建请求对象
    NSURLRequest *request = [NSURLRequest requestWithURL:url];

    // 3.发送异步请求
    /*
     第一个参数:请求对象
     第二个参数:回调方法在哪个线程中执行,如果是主队列则block在主线程中执行,非主队列则在子线程中执行
     第三个参数:completionHandlerBlock块:接受到响应的时候执行该block中的代码
        response:响应头信息
        data:响应体
        connectionError:错误信息,如果请求失败,那么该参数有值
     */
    [NSURLConnection sendAsynchronousRequest:request queue:[[NSOperationQueue alloc]init] completionHandler:^(NSU
首页 上一页 1 2 3 下一页 尾页 1/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇iOS之获取经纬度并通过反向地理编.. 下一篇iOS开发系列--Swift 3.0

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目