狂奔的蜗牛

博学之,审问之,慎思之,明辨之,笃行之。
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

转一个别人封装好的NSURLRequest POST 和GET 类

Posted on 2012-08-15 23:34  蜗牛狂奔  阅读(2757)  评论(0编辑  收藏  举报

转载别人的博文,我整理了一下方便大家使用

头文件:

//
//  RESTHelper.h
//  Mainaer
//
//  Created by dhanzhang on 10-7-7.
//  Copyright 2010 http://hi.csdn.net/dhz123. All rights reserved.
//
 
#import <Foundation/Foundation.h>
 
/*
用于发送 HTTP  请求的辅助类 
封装  POST  请求
*/
 
@interface RESTHelper : NSObject  
{
    NSString  * requestUrlPath;
    id  mdelegate;
    SEL doneSelector;
    SEL errorSelector; 
}

-(id)  initWithUrl:(NSString*) urlPath postData:(NSDictionary*)  data delegate:(id)  aDelegate onErrorCallback:(SEL) errorCallback onCompletedCallback:(SEL) complectedCallback;

@end

 

.m文件

//
//  RESTHelper.m
//  Mainaer
//
//  Created by dhanzhang on 10-7-7.
//  Copyright 2010 http://hi.csdn.net/dhz123. All rights reserved.
//
#import "RESTHelper.h"
#import "Log.h"

static NSString * const BOUNDRY = @"--------------------------7d71a819230404";

@interface RESTHelper(Private) 

@end

@implementation  RESTHelper(Private) 
 
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error            
{
    CMLog(@"NSURLCOnnection ERROR!");
    [mdelegate performSelector: errorSelector  withObject:error];
}
 
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data              
{
    CMLog(@"NSURLConnection ReceivedData!");
    NSString *reply  =[ [NSString alloc] initWithData:data encoding:NSUTF8StringEncoding] ;
    [mdelegate performSelector:  doneSelector  withObject: reply];
    [reply release];
}

@end

@implementation RESTHelper
 
-(id)initWithUrl:(NSString*)urlPath postData:(NSDictionary*)data delegate:(id)aDeletgate onErrorCallback:(SEL)errorCallback onCompletedCallback:(SEL)complectedCallback
{
    if (self=[super init])
    {
        requestUrlPath =[[NSString stringWithString:  urlPath] lowercaseString];
        mdelegate=[aDeletgate retain];
        errorSelector= errorCallback;
        doneSelector = complectedCallback;
        NSURL  * url=[NSURL URLWithString:requestUrlPath];
        NSMutableURLRequest  * req=[NSMutableURLRequest requestWithURL: url];
        if (data != nil ) 
        {
            [req setHTTPMethod:@"POST"];
            [reqsetValue: [NSString stringWithFormat:@"multipart/form-data; boundary=%@", BOUNDRY] forHTTPHeaderField:@"Content-Type"];
            int len=512;
            NSMutableData  * postData =[NSMutableData dataWithCapacity:len];
            [postData  appendData: [[NSString  stringWithFormat:@"--%@/r/n",BOUNDRY] dataUsingEncoding:NSUTF8StringEncoding]];
            int  i=0;
            int  cnt=data.count;
            for ( NSString * key in  [data allKeys]) 
            {
                [postData  appendData: [[NSString stringWithFormat:@"Content-Disposition: form-data; name=/"%@/"/r/n/r/n", key ] dataUsingEncoding:NSUTF8StringEncoding]];
                [postData  appendData: [[NSString  stringWithFormat:@"%@",[data objectForKey:key ]] dataUsingEncoding:NSUTF8StringEncoding]];
                if( i != cnt -1  )
                {
                    [postData  appendData: [[NSString  stringWithFormat:@"/r/n--%@/r/n",BOUNDRY] dataUsingEncoding:NSUTF8StringEncoding]];
                }
                i++ ;
            }
            [postData  appendData:[[NSString stringWithFormat:@"/r/n--%@--/r/n",BOUNDRY] dataUsingEncoding:NSUTF8StringEncoding]];
            [req  setHTTPBody:postData];
        }
        else 
        {
            [req  setHTTPMethod:@"GET"];
        }
        NSURLConnection * connection =[[[NSURLConnection alloc] initWithRequest:req delegate:self] autorelease];
        if(!connection)
        { 
            NSDictionary * errorInfo=[NSDictionary dictionaryWithObjectsAndKeys:@"发送请求失败" ,@"errorKey", nil];
            NSError * error=[NSError errorWithDomain:@"www.mainaer.com" code:100 userInfo:  errorInfo];
            [mdelegate performSelector:errorCallback withObject: error];
        }  
        else 
        {
            CMLog(@"Send Data Request /n");
        }
    }
    return self;
}
 
- (void)dealloc
{
    [mdelegate release];
    mdelegate = nil;

    doneSelector = NULL;
    errorSelector = NULL;
 
    [super dealloc];
}

@end

 
调用方法:

NSDictionary  * loginData=[NSDictionary dictionaryWithObjectsAndKeys: txtUserName.text,@"UserName", txtPassword1.text,@"Password", txtPassword2.text,@"Password2", txtEmail.text,@"EMail", nil];

RESTHelper  * hlp =[[ RESTHelper  alloc] initWithUrl:@"http://www.daihanzhang.com/Reg.ashx" postData: loginData delegate:self onErrorCallback:@selector(errorCallback:) onCompletedCallback:@selector(completedCallback:)];
 
[hlp release]; 
 
//------

-(void)  errorCallback:(NSError*) error;

/*数据下载完毕 */
 
-(void)  completedCallback:(NSString*) data;