• 什么是URL?
    URL就是资源的地址、位置,互联网上的每个资源都有一个唯一的URL
    URL的基本格式:
  • URL中常见的协议

    (1)HTTP

    超文本传输协议,访问的是远程的网络资源,格式是http://

    http协议是在网络开发中最常用的协议

    (2)file

    访问的是本地计算机上的资源,格式是file://(不用加主机地址)

    (3)mailto

    访问的是电子邮件地址,格式是mailto:

    (4)FTP

    访问的是共享主机的文件资源,格式是ftp://

  • HTTP请求示例,返回JSON
        // 1.拼接一个请求路径,请求参数跟在URL的后面以?隔开,多个参数之间以&符号拼接
    NSString *httpUrl = [NSString stringWithFormat:@"https://free-api.heweather.com/v5/weather?city=%@&key=XXX",[cityName stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
      //2.创建一个请求
    NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:httpUrl]];
    //3.将请求的url数据放到NSData对象中(同步请求,在主线程下载数据,执行时间根据数据大小变化)
    NSData *response = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil]; //4.解析数据,根据请求返回的类型,这里用IOS5自带解析类NSJSONSerialization从response中解析出数据放到字典中
    NSDictionary *jsonDict = [NSJSONSerialization JSONObjectWithData:response options:NSJSONReadingMutableLeaves error:nil];

    异步请求

    // 3.发送异步请求,收到返回数据后回到主线程执行任务
    [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {
    if (connectionError || data == nil) {
    NSLog(@"网络繁忙,请稍后尝试");
    }
    // 4.解析数据,根据请求返回的类型,这里用IOS5自带解析类NSJSONSerialization从response中解析出数据放到字典中
    NSDictionary *jsonDict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:nil];
    }];
  • HTTP请求返回XML

    一、XML简单介绍

    XML:全称是Extensible Markup Language,译作“可扩展标记语言”

    跟JSON一样,也是常用的一种用于交互的数据格式,一般也叫XML文档(XML Document)

    XML举例

    <videos>

    <video name="小黄人 第01部" length="30" />

    <video name="小黄人 第02部" length="19" />

    <video name="小黄人 第03部" length="33" />

    </videos>

    二、XML的语法

    1.简单说明

    一个常见的XML文档一般由以下部分组成

    文档声明

    元素(Element)

    属性(Attribute)

    2.文档声明

    在XML文档的最前面,必须编写一个文档声明,用来声明XML文档的类型

    最简单的声明

    <?xml version="1.0" ?>

    用encoding属性说明文档的字符编码

    <?xml version="1.0" encoding="UTF-8" ?>

    3.XML语法 – 元素(Element)

    一个元素包括了开始标签和结束标签

    拥有元素内容:<video>小黄人</video>

    没有元素内容:<video></video>

    没有元素内容的简写:<video/>

    一个元素可以嵌套若干个子元素(不能出现交叉嵌套)

    <videos>

    <video>

    <name>小黄人 第01部</name>

    <length>30</length>

    </video>

    </videos>

    注意:

    (1)规范的XML文档最多只有1个根元素,其他元素都是根元素的子孙元素

    (2)XML中的所有空格和换行,都会当做具体内容处理

    下面两个元素的内容是不一样的

    第1个

    <video>小黄人</video>

    第2个

    <video>

    小黄人

    </video>

    4.XML语法 – 属性(Attribute)

    一个元素可以拥有多个属性

    <video name="小黄人 第01部" length="30" />            ---->video元素拥有name和length两个属性

    注意:属性值必须用 双引号"" 或者 单引号'' 括住

    实际上,属性表示的信息也可以用子元素来表示,比如

    <video>

    <name>小黄人 第01部</name>

    <length>30</length>

    </video>

    三、XML的解析

    1.简单说明

    要想从XML中提取有用的信息,必须得学会解析XML

    提取name元素里面的内容

    <name>小黄人 第01部</name>

    提取video元素中name和length属性的值

    <video name="小黄人 第01部" length="30" />

    XML的解析方式有2种

    (1)DOM:一次性将整个XML文档加载进内存,比较适合解析小文件

    (3)SAX:从根元素开始,按顺序一个元素一个元素往下解析,比较适合解析大文件

    2.IOS开发中XML的解析

    在iOS中,解析XML的手段有很多

    (1)苹果原生   NSXMLParser:SAX方式解析,使用简单

    (2)第三方框架

    1)libxml2:纯C语言,默认包含在iOS SDK中,同时支持DOM和SAX方式解析

    2)GDataXML:DOM方式解析,由Google开发,基于libxml2

    XML解析方式的选择建议:

    大文件:NSXMLParser、libxml2

    小文件:GDataXML

    用GDataXML解析XML数据

    用NSXMLParser解析

    实现<NSXMLParserDelegate>的代理方法

  • HTTP的GET请求和POST请求
    >GET: 1、在请求url后面以?的形式跟上发给服务器的参数,多个参数之间用&隔开,
    比如 http://www.test.com/login?username=123&pwd=234&type=JSON
              2、由于浏览器和服务器对URL长度有限制,因此在URL后面附带的参数是限制的,通常不能超过1kb

    >HTTP:1、发给服务器的参数全部放在请求体中
               2、理论上,POST传递的数据量没有限制(具体还得看服务器的处理能力)

    选择:1).如果要传递大量数据,比如文件上传,只能用post请求
           2).get的安全性比post要差些,如果包含机密\敏感信息,建议用post
           3).如果仅仅是索取数据(数据查询),建议用get
           4).如果是增加、修改、删除数据,建议使用post

  • GET和POST的区别:http://www.techweb.com.cn/network/system/2016-10-11/2407736.shtml
    GET请求上面已经说到,这里就不累述了,下面主要写POST请求
    POST请求示例
       // 1.创建一个URL : 请求路径
    NSURL *url = [NSURL URLWithString:@"http://192.168.15.172:8080/MJServer/login"]; // 2.创建一个请求,这里使用NSMutableURLRequest,因为要设置其他属性
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; // 3.(可选)设置超时时间,5s后算请求超时(默认60s超时)
    request.timeoutInterval = ; request.HTTPMethod = @"POST"; // **设置请求的类型
    // 4.设置请求体
    NSString *param = [NSString stringWithFormat:@"username=%@&pwd=%@", usernameText, pwdText];
    // NSString --> NSData
    request.HTTPBody = [param dataUsingEncoding:NSUTF8StringEncoding]; // 5.(可选)设置请求头信息
    [request setValue:@"iPhone 6" forHTTPHeaderField:@"User-Agent"]; // 6.发送一个异步请求,收到数据后返回主线程执行任务
    [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:
    ^(NSURLResponse *response, NSData *data, NSError *connectionError) {
    // 这个block会在请求完毕的时候自动调用
    if (connectionError || data == nil) { // 一般请求超时就会来到这
    [MBProgressHUD showError:@"请求失败"];
    return;
    } // 解析服务器返回的JSON数据
    NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:nil]; }];
  • 用POST发送JSON数据给服务器
        // 1.创建请求
    NSURL *url = [NSURL URLWithString:@"http://192.168.1.200:8080/MJServer/order"];
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
    request.HTTPMethod = @"POST"; // 2.设置请求头
    [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; // 3.设置请求体
    NSDictionary *json = @{
    @"order_id" : @"",
    @"user_id" : @"",
    @"shop" : @"Toll"
    }; // NSDictionary --> NSData
    NSData *data = [NSJSONSerialization dataWithJSONObject:json options:NSJSONWritingPrettyPrinted error:nil];
    request.HTTPBody = data; // 4.发送请求
    [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) { }

iOS开发-HTTP请求的更多相关文章

  1. iOS开发网络请求——大文件的多线程断点下载

    iOS开发中网络请求技术已经是移动app必备技术,而网络中文件传输就是其中重点了.网络文件传输对移动客户端而言主要分为文件的上传和下载.作为开发者从技术角度会将文件分为小文件和大文件.小文件因为文件大 ...

  2. IOS开发 REST请求 ASIHTTPRequest用法

    ASIHTTPRequest类库简介和使用说明 官方网站: http://allseeing-i.com/ASIHTTPRequest/ .可以从上面下载到最新源码,以及获取到相关的资料. 使用iOS ...

  3. iOS开发-Get请求,Post请求,同步请求和异步请求

    标题中的Get和Post是请求的两种方式,同步和异步属于实现的方法,Get方式有同步和异步两种方法,Post同理也有两种.稍微有点Web知识的,对Get和Post应该不会陌生,常说的请求处理响应,基本 ...

  4. iOS开发中常见问题集锦

    在iOS开发中,会出现各种各样的问题.今天,就把这些常见的问题以及各位大牛的解决方案汇总下,方便以后查阅: 常见错误: 1. linker command failed with exit code ...

  5. IOS开发之自动布局显示网络请求内容

    在上一篇博客中详细的介绍了IOS开发中的相对布局和绝对布局,随着手机屏幕尺寸的改变,在App开发中为了适应不同尺寸的手机屏幕,用自动布局来完成我们想要实现的功能和效果显得尤为重要.本人更喜欢使用相对布 ...

  6. iOS开发 GET、POST请求方法(NSURLSession篇)

    NSURLConnection,在iOS9被宣布弃用,本文不使用NSURLConnection进行网络编程,有兴趣的童鞋可以参考: [iOS开发 GET.POST请求方法(NSURLConnectio ...

  7. iOS开发 GET、POST请求方法(NSURLConnection篇)

    Web Service使用的主要协议是HTTP协议,即超文本传输协议. HTTP/1.1协议共定义了8种请求方法(OPTIONS.HEAD.GET.POST.PUT.DELETE.TRACE.CONN ...

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

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

  9. iOS开发网络篇—发送GET和POST请求(使用NSURLSession)

    iOS开发网络篇—发送GET和POST请求(使用NSURLSession) 说明: 1)该文主要介绍如何使用NSURLSession来发送GET请求和POST请求 2)本文将不再讲解NSURLConn ...

随机推荐

  1. InnoDB 引擎独立表空间 innodb_file_per_table

    使用过MySQL的同学,刚开始接触最多的莫过于MyISAM表引擎了,这种引擎的数据库会分别创建三个文件:表结构.表索引.表数据空间.我们可以将某个数据库目录直接迁移到其他数据库也可以正常工作.然而当你 ...

  2. linux xampp eclipse xdebug 无法进入断点

    一.xampp 版本 1.8.3-5 xampp安装后会自动集成xdebug,目录一般为 /opt/lampp/lib/php/extensions/***-debug-***目录 关于php 与ph ...

  3. C# 阳历转农历

    你妹的sb 原文 C#(ASP.NET)公历转农历的简单方法 Dot Net 平台,对全球化的支持做的非常好,不得不称赞一个 通常,将公历转为农历,是个非常烦的事情,需要整理闰年.闰月等的对照表. 在 ...

  4. 搭建Eclipse、Resin Web开发环境

    搭建Eclipse.Resin Web开发环境 一.当然是安装java开发环境 参看: Java环境的搭建 http://www.cnblogs.com/ghj1976/archive/2010/04 ...

  5. 移动端的日期插件 mobiscroll 2.14.4 破解版

    官方报价695美元 http://mobiscroll.com/pricing 这个 mobiscroll 2.14.4 破解版 包括datetime和calendar组件,包括mobiscroll和 ...

  6. 通过AopTestUtils对切面对象进行mock

    概述   当对一个切面类进行测试时,由于Spring对切面对象生成了proxy对象,此时对切面对象使用ReflectionTestUtils赋值,操作的是proxy对象,而不是真实对象,会使得赋值出问 ...

  7. 手势冲突UIPanGestureRecognizer 和UIPinchGestureRecognizer

    当同时使用pan和pin手势时假如冲突,需要加入下面方法 - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shou ...

  8. shell变量定义

    http://blog.csdn.net/longxibendi/article/details/6125075 set - 读写变量语法:set varName ?value?描述:返回变量varN ...

  9. CentOS6.5(带图形安装)在使用过程中遇到的一些网络问题迷惑

    比如,经常会遇到这样的问题************************** [root@SourceCompiler local]# pwd/usr/local[root@SourceCompil ...

  10. $watch How the $apply Runs a $digest

    作者:junyuecao | 发表于 8-8 13:39 | 最后更新时间:8-9 02:34 原文地址:http://angular-tips.com/blog/2013/08/watch-how- ...