mainViewControl.h文件:
#import <UIKit/UIKit.h>
@interface MainViewController : UIViewController
@end
#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请求
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 mainQueue] completionHandler:^(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 = (
);
};
}