封装好的 get 请求和 post 请求 需要时可以直接调用
#import <Foundation/Foundation.h>
@class NetWorkRequest;
@protocol NetWorkRequestDelegate <NSObject>
@optional
- (void)networkRequest:(NetWorkRequest *)request didFinishLoading:(NSData *)data;
- (void)networkRequest:(NetWorkRequest *)request didDownloadProgress:(float)progress;
- (void)networkRequest:(NetWorkRequest *)request didFailWithError:(NSError *)error;
@end
@interface NetWorkRequest : NSObject<NSURLConnectionDataDelegate>
@property (nonatomic,assign) id<NetWorkRequestDelegate> delegate;
// GET请求
- (void)requestForGETWithUrl:(NSString *)urlString;
// POST请求
- (void)requestForPOSTWithUrl:(NSString *)urlString postData:(NSData *)data;
// 取消请求
- (void)cancelRequest;
@end
#import "NetWorkRequest.h"
@interface NetWorkRequest ()
{
float _totalLength;
}
@property (nonatomic,retain)NSMutableData *receiveData;
@property (nonatomic,retain)NSURLConnection *connection;
@end
@implementation NetWorkRequest
- (void)requestForGETWithUrl:(NSString *)urlString
{
[self cancelRequest];
NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
self.connection = [NSURLConnection connectionWithRequest:request delegate:self];
}
- (void)requestForPOSTWithUrl:(NSString *)urlString postData:(NSData *)data
{
[self cancelRequest];
NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setHTTPBody:data];
self.connection = [NSURLConnection connectionWithRequest:request delegate:self];
}
- (void)cancelRequest
{
[_connection cancel];
self.connection = nil;
}
#pragma mark ------ 网络状态 -------
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
self.receiveData = [NSMutableData data];
_totalLength = response.expectedContentLength;
}
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
[_receiveData appendData:data];
float progress = [_receiveData length] / _totalLength;
if ([_delegate respondsToSelector:@selector(networkRequest:didDownloadProgress:)]) {
[_delegate networkRequest:self didDownloadProgress:progress];
}
}
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
//数据下载成功
if ([_delegate respondsToSelector:@selector(networkRequest:didFinishLoading:)]) {
if (_receiveData != nil) {
[_delegate networkRequest:self didFinishLoading:_receiveData];
}
}
self.receiveData = nil;
}
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
if ([_delegate respondsToSelector:@selector(networkRequest:didFailWithError:)]) {
[_delegate networkRequest:self didFailWithError:error];
}
}
@end
使用步骤
1.在要使用的类中导入
#import "NetWorkRequest.h"
2.初始化一个<pre name="code" class="objc">NetWorkRequest 对象 让他服从 <pre name="code" class="objc">NetWorkRequest 协议
调用中的 get 和 post 请求即可
3.实现所需要的协议的方法
在代理方法
- (void)networkRequest:(NetWorkRequest *)request didFinishLoading:(NSData *)data
{
//json 解析
NSDictionary *dataDic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
//XML解析
中实现对请求数据的解析