iOS中网络编辑

mainViewControl.h文件:



#import <UIKit/UIKit.h>

@interface MainViewController : UIViewController

@end



mainViewControl.m文件:

#import "MainViewController.h"

//1.引入头文件

#import "netWorkEngine.h"

//遵循协议

@interface MainViewController ()<NetWorkEngineDelegate>

@end

@implementation MainViewController


- (void)viewDidLoad {

    [super viewDidLoad];

    // Do any additional setup after loading the view.

    self.title = @"网络编程";

    self.view.backgroundColor = [UIColor cyanColor];

    //get请求

    netWorkEngine *netWorkEngines = [netWorkEngine netWorkEngineWithURLString:@"http://c.m.163.com/nc/article/AQETUMR200014OMD/full.html" parameters:nil responsendDelegate:self httpMethodType:NetWorkEngineTypeGET];

    [netWorkEngines startRequestNetWork];

    //post请求

    //http://ipad-bjwb.bjd.com.cn/DigitalPublication/publish/Handler/APINewsList.ashx?date=20131129&startRecord=1&len=5&udid=1234567890&terminalType=Iphone&cid=213

    netWorkEngine *endine = [netWorkEngine netWorkEngineWithURLString:@"http://ipad-bjwb.bjd.com.cn/DigitalPublication/publish/Handler/APINewsList.ashx?" parameters:@{@"date":@"20131129",@"startRecord":@"1",@"len":@"5",@"udid":@"1234567890",@"terminalType":@"Iphone",@"cid":@"213"} responsendDelegate:self httpMethodType:NetWorkEngineTypePOST];

    [endine startRequestNetWork];

    

}


-(void)netWorkDidStartLoading:(netWorkEngine *)netWorkEngine{

    NSLog(@"请求网络开始");

    

}

-(void)netWorkDidFinishLoading:(netWorkEngine *)netWorkEngine withResponseObject:(id)responsedObject{

    

    NSLog(@"%@",responsedObject);

    

}


- (void)didReceiveMemoryWarning {

    [super didReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.

}


/*

#pragma mark - Navigation


// In a storyboard-based application, you will often want to do a little preparation before navigation

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {

    // Get the new view controller using [segue destinationViewController].

    // Pass the selected object to the new view controller.

}

*/


@end


netWorkEngine.h文件:


//编译内容

#import <Foundation/Foundation.h>

//3、创建一个网络请求方式的枚举;

typedef enum{

    NetWorkEngineTypeGET,//GET网络请求

    NetWorkEngineTypePOST,//POST网络请求

    NetWorkEngineTypePUT,//PUT网络请求

    NetWorkEngineTypeDELETE//DELETE网络请求

}NetWorkEngineType;


//只需要让其知道这样一个类,不需要进一步编译

@class netWorkEngine;

//1、创建代理;

@protocol NetWorkEngineDelegate <NSObject>

//网络请求开始

-(void)netWorkDidStartLoading:(netWorkEngine *)netWorkEngine;

//网络请求结束;

-(void)netWorkDidFinishLoading:(netWorkEngine *)netWorkEngine withResponseObject:(id)responsedObject;


@end


@interface netWorkEngine : NSObject


//实用类方法

//2、创建初始化方法,传入网络请求必要的参数,

/*

 第一个参数urlString:网络请求的网址

 第二个参数parameters POST类型的网络请求需要传入的参数列表

 第三个参数: delegate:遵循网络请求协议的类

  网络请求类型;

 */

+(instancetype)netWorkEngineWithURLString:(NSString *)urlString parameters: (NSDictionary *)parameters responsendDelegate:(id<NetWorkEngineDelegate>)delegate httpMethodType:(NetWorkEngineType)netWorkEngineType;


//4、启用。即将开始网络请求;

-(void)startRequestNetWork;


@end


#import "netWorkEngine.h"


netWorkEngine.m文件

@interface netWorkEngine ()

//请求网址;

@property(nonatomic, copy) NSString *urlString;

//请求参数

@property(nonatomic, retain) NSDictionary *parmeters;

//请求对象;

@property(nonatomic ,assign) id<NetWorkEngineDelegate>delegate;

//请求方式

@property(nonatomic, assign) NetWorkEngineType netWorkType;


@end


@implementation netWorkEngine

//6、完成初始化方法;

-(instancetype)initWithnetWorkEngineWithURLString:(NSString *)urlString parameters: (NSDictionary *)parameters responsendDelegate:(id<NetWorkEngineDelegate>)delegate httpMethodType:(NetWorkEngineType)netWorkEngineType{

    self = [super init];

    if (self) {

        self.urlString = urlString;

        self.parmeters = parameters;

        self.delegate = delegate;

        self.netWorkType = netWorkEngineType;

    }

    return self;

}

//遍历构造器;

+(instancetype)netWorkEngineWithURLString:(NSString *)urlString parameters:(NSDictionary *)parameters responsendDelegate:(id<NetWorkEngineDelegate>)delegate httpMethodType:(NetWorkEngineType)netWorkEngineType{

    netWorkEngine *netWorkEngines = [[netWorkEngine alloc] initWithnetWorkEngineWithURLString:urlString parameters:parameters responsendDelegate:delegate httpMethodType:netWorkEngineType];

    return netWorkEngines;

}



//7、开始网络请求


-(void)startRequestNetWork{

    //把请求网址字符串转化为NSURL

    /*

     NSURL其实就是我们在浏览器上看到的网站地址,这就是一个字符串么,但是还要再写一个NSURL呢,主要是因为网站地址的字符串都比较复杂,包括很多请求参数,这样在请求过程中需要解析出来每个部门,所以封装一个NSURL,操作很方便:

     */

    NSURL *url = [NSURL URLWithString:self.urlString];

    //新的网络请求对象;

    NSMutableURLRequest *request = [NSMutableURLRequest new];

    //判断网络类型;

    if (self.netWorkType == NetWorkEngineTypeGET) {

        //GET请求

        //添加请求网址

        request = [NSMutableURLRequest requestWithURL:url];

        //设置请求类型;

        [request setHTTPMethod:@"GET"];

        

        

    }else if (self.netWorkType == NetWorkEngineTypePOST){

        //10.POST请求;

        request = [NSMutableURLRequest requestWithURL:url];

        //设置请求参数

        [request setHTTPMethod:@"POST"];

        //配置POST配置参数;

        if (self.parmeters) {

            [request setHTTPBody:[self parameterTransformToHTTPBody]];

        }

        

        

    }

    //设置请求超时时间;

    //时间超过十五秒,返回请求失败;

    [request setTimeoutInterval:15.0];

    

    //9、在网络请求开始的时候,把网络请求开始方法传给代理对象

    if (self.delegate && [self.delegate respondsToSelector:@selector(netWorkDidStartLoading:)]) {

        [self.delegate netWorkDidStartLoading:self];

    }

    //8、异步链接实现网络请求(block);

   /*

    

    

    */

    __block netWorkEngine *weakEngine = self;

    [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueuecompletionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {

        //8.1判断错误是否存在;

        if (connectionError) {

            NSLog(@"connectionError ==== %@",connectionError);

        }else{

        

        //8.2,代理是否存在

        if (self.delegate && [self.delegate respondsToSelector:@selector(netWorkDidFinishLoading:withResponseObject:)]) {

            //8.3json解析

            NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];

            //8.4 数据传递给代理对象

            [self.delegate netWorkDidFinishLoading:weakEngine withResponseObject:dic];

        }


    }

        

    }];

}


//11.把用户传递的POST请求参数转化为NSDate类型;

-(NSData *)parameterTransformToHTTPBody{

    //获取字典中所有的·key

    NSArray *keyArray = self.parmeters.allKeys;

    //创建一个可变数组,存放所有的键值;

    NSMutableArray *keyValueArray = [NSMutableArray new];

    

    for (NSString *key in keyArray) {

        NSString *para = [NSString stringWithFormat:@"%@=%@",key,self.parmeters[key]];

        

        [keyValueArray addObject:para];

    }

        //将数组的元素之间拼接上&符号;

        NSString *paramstr = [keyValueArray componentsJoinedByString:@"&"];

        //把字符串类型转化为NSDate

        NSData *httpBodyDate = [paramstr dataUsingEncoding:NSUTF8StringEncoding];

        

    

    return httpBodyDate;

}


@end



用iPhone6Xcold8.0版本运行,将请求的结果打印在控制台,如下所示:

{

    AQETUMR200014OMD =     {

        apps =         (

        );

        boboList =         (

        );

        body = "<!--IMG#0--><p>\U3000\U3000\U8d44\U6599\U56fe\Uff1a\U7f8e\U56fd\U519b\U8230\U9a76\U8fd1\U5357\U6d77\U4e2d\U56fd\U6d3e\U62a4\U536b\U8230\U8d34\U8fd1\U76d1\U89c6\U3002</p><p>\U3000\U3000<strong>\U539f\U6807\U9898\Uff1a\U4e13\U5bb6\Uff1a\U4e2d\U65b9\U8239\U53ea\U53ef\U649e\U51fb\U7f8e\U6311\U8845\U519b\U8230 \U7f8e\U8d1f\U5168\U90e8\U8d23\U4efb</strong></p><p>\U3000\U3000<strong>\U53cd\U5236\U8003\U9a8c\U4e2d\U65b9\U667a\U6167\U4e0e\U80fd\U529b</strong></p><p>\U3000\U3000\U4e00\U540d\U4e2d\U56fd\U519b\U4e8b\U4e13\U5bb6\U5bf9\U300a\U73af\U7403\U65f6\U62a5\U300b\U8868\U793a\Uff0c\U4e0a\U8ff0\U7f8e\U65b9\U4fa6\U5bdf\U5e73\U53f0\U4e2d\Uff0c\U6c34\U9762\U4fa6\U5bdf\U5e73\U53f0\U76f8\U5bf9\U8f83\U5bb9\U6613\U53cd\U5236\Uff0c\U4e2d\U56fd\U76ee\U524d\U7684\U9a71\U9010\U8230\U3001\U62a4\U536b\U8230\U7684\U822a\U7a0b\U5b8c\U5168\U80fd\U591f\U6ee1\U8db3\U5728\U5357\U6c99\U9644\U8fd1\U6267\U884c\U4efb\U52a1\U7684\U9700\U8981\U3002\U4e2d\U65b9\U5b8c\U5168\U53ef\U4ee5\U91c7\U53d6\U4e00\U5bf9\U4e00\U76ef\U68a2\U6218\U672f\U3002\U5728\U5bf9\U65b9\U8230\U8247\U8bd5\U56fe\U8fdb\U5165\U4e2d\U65b9\U5c9b\U5c7f\U768412\U6d77\U91cc\U7ebf\U65f6\Uff0c\U53ef\U4ee5\U901a\U8fc7\U65e0\U7ebf\U7535\U8b66\U544a\U3001\U5916\U903c\U3001\U649e\U51fb\U7b49\U9010\U6b65\U5347\U7ea7\U7684\U65b9\U5f0f\U6765\U5e94\U5bf9\Uff0c\U7f8e\U65b9\U5fc5\U987b\U5bf9\U7531\U6b64\U5f15\U53d1\U7684\U51b2\U7a81\U8d1f\U6709\U5168\U90e8\U8d23\U4efb\U3002\U5bf9\U4e8e\U53ef\U80fd\U524d\U6765\U4fa6\U5bdf\U7684\U7f8e\U56fd\U6838\U6f5c\U8247\Uff0c\U5173\U952e\U662f\U8981\U53ca\U65f6\U53d1\U73b0\U3002\U4e2d\U65b9\U5de1\U903b\U673a\U5e94\U52a0\U5f3a\U5728\U5357\U6d77\U4e0a\U7a7a\U7684\U53cd\U6f5c\U5de1\U903b\Uff0c\U540c\U65f6\U5728\U5173\U952e\U533a\U57df\U6d77\U5e95\U5e03\U8bbe\U4fa6\U542c\U88c5\U7f6e\U3002</p><p>\U3000\U3000\U8fd9\U540d\U4e13\U5bb6\U8ba4\U4e3a\Uff0c\U76ee\U524d\U4e2d\U56fd\U5e72\U6270\U201c\U5168\U7403\U9e70\U201d\U7684\U6d88\U606f\U5c1a\U672a\U8bc1\U5b9e\Uff0c\U5982\U679c\U8fd9\U4e00\U6d88\U606f\U5c5e\U5b9e\Uff0c\U90a3\U4e48\U8bf4\U660e\U4e2d\U56fd\U91c7\U53d6\U7684\U8fd9\U79cd\U53cd\U5236\U4e3e\U63aa\U8981\U6bd4\U76f4\U63a5\U78b0\U649e\U66f4\U52a0\U667a\U6167\Uff0c\U8fd9\U53ef\U80fd\U662f\U5728\U7f8e\U65b9\U98de\U673a\U5c1a\U672a\U8e29\U7ea2\U7ebf\U7684\U60c5\U51b5\U4e0b\U6700\U597d\U7684\U53cd\U5236\U4e3e\U63aa\U3002\U8fd9\U79cd\U884c\U52a8\U907f\U514d\U4e86\U51b2\U7a81\U5347\U7ea7\Uff0c\U51cf\U5c0f\U4e86\U98ce\U9669\U3002\U4e13\U5bb6\U8ba4\U4e3a\Uff0c\U5bf9\U201c\U5168\U7403\U9e70\U201d\U81f3\U5c11\U53ef\U901a\U8fc7\U4e09\U79cd\U65b9\U5f0f\U8fdb\U884c\U5e72\U6270\Uff0c\U5206\U522b\U662f\U536b\U661f\U6307\U6325\U94fe\U8def\U3001GPS\U5bfc\U822a\U4fe1\U53f7\U548c\U5408\U6210\U5b54\U5f84\U96f7\U8fbe\U3002\U53ea\U9700\U8981\U5bf9\U5176\U5408\U6210\U5b54\U5f84\U96f7\U8fbe\U8fdb\U884c\U5e72\U6270\Uff0c\U5c31\U80fd\U4f7f\U5176\U4fa6\U5bdf\U6548\U679c\U5927\U6253\U6298\U6263\U3002\U5982\U679c\U80fd\U591f\U5e72\U6270\U5e76\U6b3a\U9a97\U536b\U661f\U6307\U6325\U94fe\U8def\U3001GPS\U5bfc\U822a\U4fe1\U53f7\Uff0c\U751a\U81f3\U6709\U53ef\U80fd\U5982\U7f8e\U56fd\U5a92\U4f53\U62a5\U9053\U7684\U5c06\U5176\U6355\U83b7\U3002</p><p>\U3000\U3000(\U539f\U6807\U9898\Uff1a\U4e2d\U65b9\U8239\U53ea\U53ef\U649e\U51fb\U7f8e\U6311\U8845\U519b\U8230 \U8981\U53ca\U65f6\U53d1\U73b0\U7f8e\U6838\U6f5c\U8247)</p>";

        digest = "\U4e13\U5bb6\U8bf4\Uff0c\U5bf9\U4e8e\U53ef\U80fd\U524d\U6765\U4fa6\U5bdf\U7684\U7f8e\U56fd\U6838\U6f5c\U8247\Uff0c\U5173\U952e\U662f\U8981\U53ca\U65f6\U53d1\U73b0\U3002\U4e2d\U65b9\U5de1\U903b\U673a\U5e94\U52a0\U5f3a\U5728\U5357\U6d77\U4e0a\U7a7a\U7684\U53cd\U6f5c\U5de1\U903b\Uff0c\U540c\U65f6\U5728\U5173\U952e\U533a\U57df\U6d77\U5e95\U5e03\U8bbe\U4fa6\U542c\U88c5\U7f6e\U3002";

        dkeys = "\U4e2d\U65b9,\U649e\U51fb,\U7f8e\U6838\U6f5c\U8247";

        docid = AQETUMR200014OMD;

        hasNext = 0;

        img =         (

                        {

                alt = "";

                pixel = "550*379";

                ref = "<!--IMG#0-->";

                src = "http://img1.cache.netease.com/catchpic/4/4B/4BF5328DB9CE23269C87FDF51D17A14F.jpg";

            }

        );

        link =         (

        );

        picnews = 1;

        ptime = "2015-05-25 09:02:00";

        "relative_sys" =         (

        );

        replyBoard = "news3_bbs";

        replyCount = 4950;

        source = "\U73af\U7403\U65f6\U62a5-\U73af\U7403\U7f51";

        template = normal;

        threadAgainst = 0;

        threadVote = 2;

        tid = "";

        title = "\U4e13\U5bb6\Uff1a\U5173\U952e\U662f\U770b\U4f4f\U7f8e\U519b\U6838\U6f5c\U8247";

        topiclist =         (

                        {

                alias = "\U7f51\U6613\U519b\U4e8b\U9891\U9053\Uff0c\U5173\U6ce8\U519b\U4e8b\U65b0\U95fb";

                cid = C1378977941637;

                ename = wangyijunshi;

                hasCover = 0;

                subnum = "112.4\U4e07";

                tid = T1401334013017;

                tname = "\U7f51\U6613\U519b\U4e8b";

            }

        );

        "topiclist_news" =         (

        );

        users =         (

        );

        voicecomment = off;

        votes =         (

        );

        ydbaike =         (

        );

    };

}


可见,全部是uncle码,将其复制进创建好的空文档,以plist文件展示,就可以得到:





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值