HttpRequest网络编程的实现框架

HttpRequest网络编程的实现框架网络编程,主要的是向服务器发送请求,并且接受服务器的响应。以下是一般情况下的httprequest的框架。HttpRequest网络编程的实现框架

#import <Foundation/Foundation.h>

@protocol HTTPRequestDownDelegate <NSObject>

-(void)complateWithData:(NSData *)data;  

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

@end


@interface HttpRequest : NSObject<NSURLConnectionDataDelegate>

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

-(void)downLoadFromURL:(NSString *)url;

-(NSData *)SynchronousDownloadFromURL:(NSString *)url error:(NSError **)error;

@end

以下是.m文件

#import "HttpRequest.h"

@interface HttpRequest ()

@property (nonatomic,retain) NSMutableData *data;

@end


@implementation HttpRequest

-(NSMutableData *)data

{

    if (!_data) {

        _data = [[NSMutableData alloc] init];

    }

    return _data;

}

//使用异步方式下载数据

-(void)downLoadFromURL:(NSString *)url

{

    //编码URL中的中文和符号,可用

    //[url stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]

    //方法进行解码

    url = [url stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

    //创建URL请求

    NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:url]];   

    //直接创建一个异步请求

    [NSURLConnection connectionWithRequest:request delegate:self];

    //    [[[NSURLConnection alloc] initWithRequest:request delegate:self] autorelease];等价

}

-(NSData *)SynchronousDownloadFromURL:(NSString *)url error:(NSError **)error

{

    url = [url stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

    NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:url]];

    NSHTTPURLResponse *response = nil;

    return [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:error];

}

//当链接收到回复时调用该方法

-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response

{

    NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response;

    //对于http请求,成功的返回码为200,还有其他的各类返回码,如404代表页面不存在,500代表服务器错误等等,可以参考其他具体的文档

    if (httpResponse.statusCode != 200 ) {

        //do something

    }

}

//如果连接失败,调用该方法

-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error

{

    NSLog(@"连接失败:%@",[error localizedDescription]);

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

        [self.delegate failedWithError:error];

    }

}

//每当网络连接收到数据时都会调用此方法,并追加到已经储存的数据后边

//该方法会被循环调用

-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data

{

#if 0

    static int count;

    count++;

    NSLog(@"接收数据:%@,第%d次",data,count);

#endif

    [self.data appendData:data];

}

//当数据下载完成时调用该方法,将数据返回给调用者

-(void)connectionDidFinishLoading:(NSURLConnection *)connection

{

    //对于代理对象,最好的调用方式是有限判断能否相应要调用的方法

    //这种方式可以有效的防止unrecognized selector错误导致程序崩溃

    //对于协议中的optional方法使用这种判断则尤为重要

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

        //回调请求数据的对象,将下载完成的数据传递回去

        [self.delegate complateWithData:self.data];

        //当把数据返回回去之后清空原数据,避免因为缓存造成数据混淆

        self.data = nil;

    }

}

 

@end

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值