直接上源码了,等了解比较透彻的时候在做详细讲解
.h文件源码
//// DSRequestManager.h// DeseDAZ//// Created by 安浩 on 15/6/19.// Copyright (c) 2015年 DAZ. All rights reserved.///** * 网络请求 */#import//声明一个 blcok 属性 用来传值//finishBlcok 把请求完毕 解析好的数据传出来 id 可以代表任意类型typedef void (^FinishBlock)(id dataResponse);@interface DSRequestManager : NSObject @property (nonatomic,strong) NSMutableData *resultData;@property (nonatomic,strong) FinishBlock finishBlock;/** * post 类方法 * * @param urlStr 接口参数 内部设计了接口基本链接的宏 只传后面跟的接口参数 * @param paramters 需要传的参数 * @param block 返回值 */+ (void)postRequestWithURL:(NSString *)urlStr paramters:(NSDictionary *)paramters finshedBlock:(FinishBlock)block;/** * get 类方法 * * @param urlStr 接口参数 * @param block 返回值 */+ (void)getRequestWithURL:(NSString *)urlStr paramters:(NSDictionary *)paramters finshedBlock:(FinishBlock)block;@end
.m文件源码
//// DSRequestManager.m// DeseDAZ//// Created by 安浩 on 15/6/19.// Copyright (c) 2015年 DAZ. All rights reserved.//#import "DSRequestManager.h"#import "APIHeader.h"@implementation DSRequestManager#pragma mark ----------post----------/** * post 类方法 * * @param urlStr 接口参数 内部设计了接口基本链接的宏 只传后面跟的接口参数 * @param paramters 需要传的参数 * @param block 返回值 */+ (void)postRequestWithURL:(NSString *)urlStr paramters:(NSDictionary *)paramters finshedBlock:(FinishBlock)block{ DSRequestManager *requestManager =[DSRequestManager new]; requestManager.finishBlock = block; //拼接接口 NSString *str =[NSString stringWithFormat:@"%@%@",PKAPI,urlStr]; //转化 url NSURL *url = [NSURL URLWithString:str]; //使用 NSMutableURLRequest 创建对象 //NSURLRequest 是一个不可变的请求,默认执行的就是GET请求。也就是说,通过NSURLRequest无法指定 请求方式为 POST,因为TA是不可变的。 NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; [request setHTTPMethod:@"POST"]; //准备发送的字符串 NSString *postStr = @""; //取出post参数中所有key NSArray *keyArray = [paramters allKeys]; //遍历 拼接参数的字符串 for (NSString *keyString in keyArray) { postStr = [NSString stringWithFormat:@"%@&%@=%@",postStr,keyString,[paramters objectForKey:keyString]]; } [request setHTTPBody:[postStr dataUsingEncoding:NSUTF8StringEncoding]]; //发出请求 NSURLConnection *connection = [[NSURLConnection alloc]initWithRequest:request delegate:requestManager]; NSLog(connection ? @"网络连接创建成功" : @"网络连接连接创建失败"); }#pragma mark ---------get----------/** * get 类方法 * * @param urlStr 接口参数 * @param block 返回值 */+ (void)getRequestWithURL:(NSString *)urlStr paramters:(NSDictionary *)paramters finshedBlock:(FinishBlock)block{ DSRequestManager *requestManager =[DSRequestManager new]; requestManager.finishBlock = block; //准备发送的字符串 NSMutableString *getStr = [urlStr mutableCopy]; [getStr appendString:@""]; //取出post参数中所有key NSArray *keyArray = [paramters allKeys]; //遍历 拼接参数的字符串 for (NSString *keyString in keyArray) { getStr = [NSMutableString stringWithFormat:@"%@&%@=%@",getStr,keyString,[paramters objectForKey:keyString]]; } NSURL *url = [NSURL URLWithString:[getStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]; NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:100]; NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:requestManager]; NSLog(connection ? @"网络连接创建成功" : @"网络连接连接创建失败");}/** * 接收到服务器回应的时回调 */- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{ NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response; if (!self.resultData) { self.resultData = [[NSMutableData alloc]init]; } else { [self.resultData setLength:0]; } if ([response respondsToSelector:@selector(allHeaderFields)]) { // 取得所有的请求的头 NSDictionary *dic = [httpResponse allHeaderFields]; NSLog(@"network---Header:%@",[dic description]); }}/** * 接收到服务器传输数据的时候调用,此方法根据数据大小执行若干次 */- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{ [self.resultData appendData:data];}/** * 数据传完之后调用此方法 */- (void)connectionDidFinishLoading:(NSURLConnection *)connection{ NSError *error; id dic = [NSJSONSerialization JSONObjectWithData:self.resultData options:NSJSONReadingMutableContainers error:&error]; if (error) { NSLog(@"解析错误"); self.finishBlock(nil); } if (self.finishBlock) { self.finishBlock(dic); }}/** * 网络请求过程中,出现任何错误(断网,连接超时等)会进入此方法 */- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{ NSLog(@"network error : %@", [error localizedDescription]); if (self.finishBlock) { self.finishBlock(nil); }}@end
HTTP 方法:GET 对比 POST
暂时留链接 http://www.w3school.com.cn/tags/html_ref_httpmethods.asp
http://www.w3school.com.cn/jquery/jquery_ajax_get_post.asp推荐博客链接:http://www.brighttj.com/ios/ios-http-request-post-get.html