0919-网络 请求 数据解析(掌握get post请求 解析json等代码即可)

http://localhost:8080/MJServer/video

复习看的: NSURLConnection 发送请求   暂时没有用到AFN

基本http请求 GET:

- (IBAction)login {
    // 1.用户名
    NSString *usernameText = self.username.text;
    if (usernameText.length == 0) {
        [MBProgressHUD showError:@"请输入用户名"];
        return;
    }

    // 2.密码
    NSString *pwdText = self.pwd.text;
    if (pwdText.length == 0) {
        [MBProgressHUD showError:@"请输入密码"];
        return;
    }

    /**
     接口文档:定义描述服务器端的请求接口
     1> 请求路径URL:客户端应该请求哪个路径
     * http://localhost:8080/MJServer/login

     2> 请求参数:客户端要发给服务器的数据
     * username - 用户名
     * pwd - 密码

     3> 请求结果:服务器会返回什么东西给客户端
     {"error":"用户名不存在"}
     {"error":"密码不正确"}
     {"success":"登录成功"}
     */

    // 3.发送用户名和密码给服务器(走HTTP协议)
    // 创建一个URL : 请求路径
    NSString *urlStr = [NSString stringWithFormat:@"http://localhost:8080/MJServer/login?username=%@&pwd=%@",usernameText, pwdText];
    NSURL *url = [NSURL URLWithString:urlStr];

    // 创建一个请求
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    NSLog(@"begin---");

    // 发送一个同步请求(在主线程发送请求)
    NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];

    // 解析服务器返回的JSON数据
    NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:nil];
    NSString *error = dict[@"error"];
    if (error) {
        // {"error":"用户名不存在"}
        // {"error":"密码不正确"}
        [MBProgressHUD showError:error];
    } else {
        // {"success":"登录成功"}
        NSString *success = dict[@"success"];
        [MBProgressHUD showSuccess:success];
    }
}

GET 解析返回的json

- (IBAction)login {
    // 1.用户名
    NSString *usernameText = self.username.text;
    if (usernameText.length == 0) {
        [MBProgressHUD showError:@"请输入用户名"];
        return;
    }

    // 2.密码
    NSString *pwdText = self.pwd.text;
    if (pwdText.length == 0) {
        [MBProgressHUD showError:@"请输入密码"];
        return;
    }

    // 3.发送用户名和密码给服务器(走HTTP协议)
    // 创建一个URL : 请求路径
    NSString *urlStr = [NSString stringWithFormat:@"http://localhost:8080/MJServer/login?username=%@&pwd=%@",usernameText, pwdText];
    NSURL *url = [NSURL URLWithString:urlStr];

    // 创建一个请求
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
//    NSLog(@"begin---");

    // 发送一个同步请求(在主线程发送请求)
    // queue :存放completionHandler这个任务
    NSOperationQueue *queue = [NSOperationQueue mainQueue];
    [NSURLConnection sendAsynchronousRequest:request queue:queue 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];
        NSString *error = dict[@"error"];
        if (error) {
            // {"error":"用户名不存在"}
            // {"error":"密码不正确"}
            [MBProgressHUD showError:error];
        } else {
            // {"success":"登录成功"}
            NSString *success = dict[@"success"];
            [MBProgressHUD showSuccess:success];
        }
     }];

//    NSLog(@"end---");
}

播放器控制器modal  播放音乐+ SDWebImage +reloadData(videos数组里网络获取到数据后 刷新表格)

//  HMVideosViewController.m

#import "HMVideosViewController.h"
#import "MBProgressHUD+MJ.h"
#import "HMVideo.h"
#import "UIImageView+WebCache.h"
#import <MediaPlayer/MediaPlayer.h>

#define HMUrl(path) [NSURL URLWithString:[NSString stringWithFormat:@"http://localhost:8080/MJServer/%@", path]]

@interface HMVideosViewController ()
@property (nonatomic, strong) NSMutableArray *videos;
@end

@implementation HMVideosViewController

- (NSMutableArray *)videos
{
    if (!_videos) {
        self.videos = [[NSMutableArray alloc] init];
    }
    return _videos;
}

- (void)viewDidLoad
{
    [super viewDidLoad];

    /**
     加载服务器最新的视频信息
     */

    // 1.创建URL
    NSURL *url = HMUrl(@"video");

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

    // 3.发送请求
    [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
        if (connectionError || data == nil) {
            [MBProgressHUD showError:@"网络繁忙,请稍后再试!"];
            return;
        }

        // 解析JSON数据
        NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:nil];
        NSArray *videoArray = dict[@"videos"];
        for (NSDictionary *videoDict in videoArray) {
            HMVideo *video = [HMVideo videoWithDict:videoDict];
            [self.videos addObject:video];
        }

        // 刷新表格
        [self.tableView reloadData];
    }];
}

#pragma mark - Table view data source
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return self.videos.count;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *ID = @"video";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];
    if (!cell) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:ID];
    }

    HMVideo *video = self.videos[indexPath.row];

    cell.textLabel.text = video.name;
    cell.detailTextLabel.text = [NSString stringWithFormat:@"时长 : %d 分钟", video.length];

    // 显示视频截图
    NSURL *url = HMUrl(video.image);
    [cell.imageView sd_setImageWithURL:url placeholderImage:[UIImage imageNamed:@"placehoder"]];

    return cell;
}

#pragma mark - 代理方法
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    // 1.取出对应的视频模型
    HMVideo *video = self.videos[indexPath.row];

    // 2.创建系统自带的视频播放控制器
    NSURL *url = HMUrl(video.url);
    MPMoviePlayerViewController *playerVc = [[MPMoviePlayerViewController alloc] initWithContentURL:url];

    // 3.显示播放器
    [self presentViewController:playerVc animated:YES completion:nil];
}
@end

GDataXML josn解析

- (void)viewDidLoad
{
    [super viewDidLoad];

    /**
     加载服务器最新的视频信息
     */

    // 1.创建URL
    NSURL *url = HMUrl(@"video?type=XML");

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

    // 3.发送请求
    [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
        if (connectionError || data == nil) {
            [MBProgressHUD showError:@"网络繁忙,请稍后再试!"];
            return;
        }

        // 解析XML数据

        // 加载整个XML数据
        GDataXMLDocument *doc = [[GDataXMLDocument alloc] initWithData:data options:0 error:nil];

        // 获得文档的根元素 -- videos元素
        GDataXMLElement *root = doc.rootElement;

        // 获得根元素里面的所有video元素
        NSArray *elements = [root elementsForName:@"video"];

        // 遍历所有的video元素
        for (GDataXMLElement *videoElement in elements) {
            HMVideo *video = [[HMVideo alloc] init];

            // 取出元素的属性
            video.id = [videoElement attributeForName:@"id"].stringValue.intValue;
            video.length = [videoElement attributeForName:@"length"].stringValue.intValue;
            video.name = [videoElement attributeForName:@"name"].stringValue;
            video.image = [videoElement attributeForName:@"image"].stringValue;
            video.url = [videoElement attributeForName:@"url"].stringValue;

            // 添加到数组中
            [self.videos addObject:video];
        }

        // 刷新表格
        [self.tableView reloadData];
    }];
}

NSXMLParser  sax方式解析

- (NSMutableArray *)videos
{
    if (!_videos) {
        self.videos = [[NSMutableArray alloc] init];
    }
    return _videos;
}

- (void)viewDidLoad
{
    [super viewDidLoad];

    /**
     加载服务器最新的视频信息
     */

    // 1.创建URL
    NSURL *url = HMUrl(@"video?type=XML");

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

    // 3.发送请求
    [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
        if (connectionError || data == nil) {
            [MBProgressHUD showError:@"网络繁忙,请稍后再试!"];
            return;
        }

        // 解析XML数据

        // 1.创建XML解析器 -- SAX -- 逐个元素往下解析
        NSXMLParser *parser = [[NSXMLParser alloc] initWithData:data];

        // 2.设置代理
        parser.delegate = self;

        // 3.开始解析(同步执行)
        [parser parse];

        // 4.刷新表格
        [self.tableView reloadData];
    }];
}

#pragma mark - NSXMLParser的代理方法
/**
 *  解析到文档的开头时会调用
 */
- (void)parserDidStartDocument:(NSXMLParser *)parser
{
//    NSLog(@"parserDidStartDocument----");
}

/**
 *  解析到一个元素的开始就会调用
 *
 *  @param elementName   元素名称
 *  @param attributeDict 属性字典
 */
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
    if ([@"videos" isEqualToString:elementName]) return;

    HMVideo *video = [HMVideo videoWithDict:attributeDict];
    [self.videos addObject:video];
}

/**
 *  解析到一个元素的结束就会调用
 *
 *  @param elementName   元素名称
 */
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
//    NSLog(@"didEndElement----%@", elementName);
}

/**
 *  解析到文档的结尾时会调用(解析结束)
 */
- (void)parserDidEndDocument:(NSXMLParser *)parser
{
//    NSLog(@"parserDidEndDocument----");
}

#pragma mark - Table view data source
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return self.videos.count;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *ID = @"video";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];
    if (!cell) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:ID];
    }

    HMVideo *video = self.videos[indexPath.row];

    cell.textLabel.text = video.name;
    cell.detailTextLabel.text = [NSString stringWithFormat:@"时长 : %d 分钟", video.length];

    // 显示视频截图
    NSURL *url = HMUrl(video.image);
    [cell.imageView sd_setImageWithURL:url placeholderImage:[UIImage imageNamed:@"placehoder"]];

    return cell;
}

POST请求

- (IBAction)login {
    // 1.用户名
    NSString *usernameText = self.username.text;
    if (usernameText.length == 0) {
        [MBProgressHUD showError:@"请输入用户名"];
        return;
    }

    // 2.密码
    NSString *pwdText = self.pwd.text;
    if (pwdText.length == 0) {
        [MBProgressHUD showError:@"请输入密码"];
        return;
    }

    // 增加蒙板
    [MBProgressHUD showMessage:@"正在拼命登录中...."];

    // 3.发送用户名和密码给服务器(走HTTP协议)
    // 创建一个URL : 请求路径
    NSURL *url = [NSURL URLWithString:@"http://localhost:8080/MJServer/login"];

    // 创建一个请求
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];

    // 5秒后算请求超时(默认60s超时)
    request.timeoutInterval = 15;

    request.HTTPMethod = @"POST";
    // 设置请求体
    NSString *param = [NSString stringWithFormat:@"username=%@&pwd=%@", usernameText, pwdText];
    // NSString --> NSData
    request.HTTPBody = [param dataUsingEncoding:NSUTF8StringEncoding];

    // 设置请求头信息
    [request setValue:@"iPhone 6" forHTTPHeaderField:@"User-Agent"];

    // 发送一个同步请求(在主线程发送请求)
    // queue :存放completionHandler这个任务
    NSOperationQueue *queue = [NSOperationQueue mainQueue];
    [NSURLConnection sendAsynchronousRequest:request queue:queue completionHandler:
     ^(NSURLResponse *response, NSData *data, NSError *connectionError) {
         // 隐藏蒙板
         [MBProgressHUD hideHUD];

//         NSHTTPURLResponse *resp = (NSHTTPURLResponse *)response;
//         NSString *msg = [NSHTTPURLResponse localizedStringForStatusCode:resp.statusCode];
//         NSLog(@"%d %@ %@", 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) {
            // {"error":"用户名不存在"}
            // {"error":"密码不正确"}
            [MBProgressHUD showError:error];
        } else {
            // {"success":"登录成功"}
            NSString *success = dict[@"success"];
            [MBProgressHUD showSuccess:success];
        }
     }];
}

GET请求www.baidu.com 无参数  打印返回结果

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    // 1.URL
    NSURL *url = [NSURL URLWithString:@"http://www.baidu.com"];

    // 2.请求
    NSURLRequest *request = [NSURLRequest requestWithURL:url];

    // 3.发送请求
    [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
        NSString *str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", str);
    }];
}

发送JSON给服务器

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    // 1.URL
    NSURL *url = [NSURL URLWithString:@"http://localhost:8080/MJServer/order"];

    // 2.请求
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];

    // 3.请求方法
    request.HTTPMethod = @"POST";

    // 4.设置请求体(请求参数)
    // 创建一个描述订单信息的JSON数据
    NSDictionary *orderInfo = @{
                                @"shop_id" : @"1243324",
                                @"shop_name" : @"啊哈哈哈",
                                @"user_id" : @"899"
                                };
    NSData *json = [NSJSONSerialization dataWithJSONObject:orderInfo options:NSJSONWritingPrettyPrinted error:nil];
    request.HTTPBody = json;

    // 5.设置请求头:这次请求体的数据不再是普通的参数,而是一个JSON数据
    [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];

    // 6.发送请求
    [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
        if (data == nil || connectionError) return;
        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];
        }
    }];

}

POST提交多个参数  且参数同名而已  多值参数   服务器接收到$_array = $_POST[‘city‘]

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    // 1.URL
    NSURL *url = [NSURL URLWithString:@"http://localhost:8080/MJServer/weather"];

    // 2.请求
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];

    // 3.请求方法
    request.HTTPMethod = @"POST";

    // 4.设置请求体(请求参数)
    NSMutableString *param = [NSMutableString string];
    [param appendString:@"place=beijing"];
    [param appendString:@"&place=tianjin"];
    [param appendString:@"&place=meizhou"];
    request.HTTPBody = [param dataUsingEncoding:NSUTF8StringEncoding];

    // 5.发送请求
    [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
        if (data == nil || connectionError) return;
        NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:nil];
        NSString *error = dict[@"error"];
        if (error) {
            [MBProgressHUD showError:error];
        } else {
//            NSArray *weathers = dict[@"weathers"];
            NSLog(@"%@", dict);
        }
    }];
}

导入三方框架GDataXML  :

1、#import

2、导入动态库libxml2, 进入头文件看到提示  配置build setting -> Header Search Paths   ,build phases->Other linker flags   -lxm2

3、GdataXML里的.m文件有release 做非ARC配置  指定一下build phases ->GDataXMLNode.m -fno-objc-arc

--------------------------------

不用第三方的  用苹果自带的 性能最好   NSJSONSerialization

OC对象-》json二进制数据   不需要掌握 很少用到

---------

播放视频

#import <MediaPlayer/MediaPlayer.h>

MPMoviePlayerViewController *playerVc = [[MPMoviePlayerViewController alloc] initWithControllerURL:url];

[self presentViewController:playerVc animated:YES completion:nil];

#define HMUrl(path)     [NSURL URLWithString: [NSString stringWithFormat:@"http://localhost:8080/NJServer/%@",path]

NSURL *url = HMUrl(@"video");

解析小文件变成OC数据  GDataXML DOM方式   一次性加载   效率差一点       非ARC编写    需要导入GData框架 和 libxml2框架(因为GData里面有用到libxml2的东西)

解析大文件变成OC数据  NSXMLParser 效率高  一个个节点元素解析   事件驱动(SAX方式)

------

----------------------

使用GDataXML框架(与MBProgressHUD一样)

1、导入GDataXML文件夹

2、代码里 #import "GDataXMLNode.h"

3、因为GDataXMLNode.h包含了苹果动态库

所以需要导入 动态库 libxml2    并做2个配置

xcode -> 项目-》build settings->Header Search Paths添加一个路径 /usr/include/libxml2

xcode -> 项目-》build settings ->Other Linker Flags     -lxml2

4、因为GDataXMLNode.m文件里有release操作   且在arc环境下   所以需要再配置一下

xcode -> 项目-》build phases ->GDataXMLNode.m ->设置一下xcode->build phases->compile sources->GDataNode.m    -fno-objc-arc

-----------

HTTP请求 NSMutableURLRequest(可变)和 NSURLRequest (不可变)

NSUrlRequest不能设置请求头 因为是不可不变的

----

请求行字符串转码

-------

--------

字典转NSData   交给请求体  (只有POST有请求体)

--------------

如果不知道服务器返回data是什么就看看 是字典还是 数组  还是数组字典都包括

先输出 看看是什么   在确定格式 如NSDictionary *dict = [NSJSONSerialization JSONObject....]

-----------------

发送json给服务器

发送 son字符串的NSData需要设置 Content-Type  application/json   否则会被认为是普通参数

-------------

POST提交多值参数  参数名都一样  参数名称都一样而已   普通数据        服务器接收到的就是数组了$arr_place = $_POST[‘place‘];

时间: 2024-10-08 10:04:13

0919-网络 请求 数据解析(掌握get post请求 解析json等代码即可)的相关文章

SpringMVC中用于绑定请求数据的注解以及配置视图解析器

SpringMVC中用于绑定请求数据的注解 在上一篇文章中我们简单介绍了@RequestMapping与@RequestParam注解,知道了如何去配置地址映射,本篇则介绍一些用于处理request数据的注解. [email protected]注解,该注解用于处理request中的header部分,也就是http请求头的部分,它可以把header部分的值绑定到方法的参数上,示例: package org.zero01.test; import org.springframework.stere

Vue--axios:vue中的ajax异步请求(发送和请求数据)、vue-resource异步请求和跨域

跨域原理: 一.使用axios发送get请求 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 6 <meta http-eq

Angular 请求数据

Angular 请求数据 get post 以及 jsonp 请求数据 引入 HttpModule .JsonpModule 普通的 HTTP 调用并不需要用到 JsonpModule,不过稍后我们就会延演示对 JSONP 的支持,所以现在就加载它,免得再回来浪费时间. 引入模块 注意:JSONP 在4版本以后已经被弃用了... import { HttpClientJsonpModule, HttpClientModule } from '@angular/common/http'; 在 im

Struts2请求数据自动封装和数据类型转换

方式1:jsp表单数据填充到action中的属性: 方式2:jsp表单数据填充到action的对象的属性: 方式1: 第一步:引包,省去 第二步:配置struts2的过滤器 1 <?xml version="1.0" encoding="UTF-8"?> 2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmln

HttpClient的Post请求数据

最近在项目中需要添加Post请求数据,以前的Get请求是使用JDK自带的URLConnection.在项目组人员的推荐下,开始使用HttpClient. HttpClient简介: HttpClient是Apache Jakarta Common下的子项目,用来提供高效的.最新的.功能丰富的支持HTTP协议的客户端编程工具包, 并且它支持HTTP协议最新的版本和建议.HttpClient已经应用在很多的项目中,比如Apache Jakarta上很著名的另外两个开源项目Cactus 和HTMLUn

Swift 网络请求数据与解析

一: Swift 网络数据请求与处理最常用第三方 又有时间出来装天才了,还是在学swift,从中又发现一些问题,这两天上网找博客看问题弄的真的心都累.博客一篇写出来,好多就直接照抄,就没有实质性的把问题解决了,只是在发表的博客数量上 + 1 !!真心没意思.. 看看在Swift中是在怎样请求数据,解析数据加载图片这些的,也使我们最基本最常见的用法了,先说说这几个三方库: 第一个: Alamofire  (它的原作者就是AFNetworking的原作者,这个就不多说了,你要知道AFNetworki

android中网络请求数据,解析并添加到Listview中

今天我实现了网络请求数据,解析并将数据添加到Listview中.上个星期我有提到说要实现点击Listview中item实现不同的功能,还是没头绪.如有幸被阅读,希望指教一下.我用的是hTTPClient的post方法请求的数据.在实现请求之前,还有一个主activity跳转.代码如下: 请求activity代码: public class MachineInterface extends Activity { private ListView machineType; private Array

iOS进阶学习-网络之数据请求

注:文中出现的网站只做用例子,所以有些已经失效的网站,具体URL大家可以自己上网搜索相关资源. 一.HTTP和HTTPS协议 1.URL: URL全称是Uniform Resource Locator(统一资源定位符)通过1个URL,能找到互联网上唯一的1个资源 URL就是资源的地址.位置,互联网上的每个资源都有一个唯一的URL URL的基本格式=协议://主机地址/路径 http://www.cnblogs.com/soley 协议:不同的协议,代表着不同的资源查找方式,资源传输方式 主机地址

iOS开发网络篇—数据的解析

网络上传输数据通用的有XML,JSON等,iOS中也可以用Plist. 要进行数据传输,就要首先进行序列化: 1.序列化. 对象转换成二进制流.(这个一句话就行) 2.反序列化. 二进制流转换为对象等. (关键要弄清楚这个) JSON:(和XML一样都是用来传数据的) 轻量级的数据交换格式,正在逐步取代XML. XML: 结构性的标记语言,易读.但数据量大. Plist偶尔用着玩玩: Mac.iOS中用的多一种格式. 一.应用场景 1.XML的应用场景: XMPP——即时通讯,KissXML R