分享一个自己用的Objective-C的Http接连类
很久没有更新博客了,所以分享一个。
@protocol HttpListenerDelegate; @interface BaseHttp : NSObject
{
} @property (nonatomic, weak) id<HttpListenerDelegate> delegate; @property (nonatomic, M_STRONG) NSURLConnection *connect;
@property (nonatomic, M_STRONG) NSMutableData *receiveData; @property (nonatomic, M_STRONG) NSString *httpUrl;
//设置当前服务的唯一标示,默认为当前的URL
@property (nonatomic, M_STRONG) NSString *identify; - (id)initWithHttpUrl:(NSString *)url; //开始调用远程服务
- (void)execute;
- (void)execute:(id)param;
//接收到服务器回应的时候调用此方法
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response;
//接收到服务器传输数据的时候调用,此方法根据数据大小执行若干次
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data;
//数据传完之后调用此方法
- (void)connectionDidFinishLoading:(NSURLConnection *)connection;
//网络请求过程中,出现任何错误(断网,连接超时等)会进入此方法
- (void)connection:(NSURLConnection *)connection
didFailWithError:(NSError *)error; @end @protocol HttpListenerDelegate <NSObject> @optional
//接收到服务器回应的时候调用此方法
- (void)didReceiveResponse:(NSURLResponse *)response identify:(NSString *)identify; - (void)didReceiveData:(NSData *)data identify:(NSString *)identify;
//后台加载数据完成
- (void)didFinishLoading:(NSMutableData*)receiveData identify:(NSString *)identify;
//网络请求异常
- (void)didFailWithError:(NSError *)error identify:(NSString *)identify; @end
//
// BaseHttp.m
// myb-ios
//
// Created by warrior gao on 13-6-7.
// Copyright (c) 2013年 51myb. All rights reserved.
// #import "BaseHttp.h" @implementation BaseHttp
- (id)initWithHttpUrl:(NSString *)url
{
self = [self init];
_httpUrl = [NSString stringWithFormat: @"%@%@",SERVER_URL, url];
_identify = url;
return self;
} -(void)setHttpUrl:(NSString *)httpUrl
{
_httpUrl = httpUrl;
if(!(_identify))
_identify = httpUrl;
} //开始调用远程服务
- (void)execute
{
[self execute:@""];
} - (void)execute:(id)param
{
if(DEBUG) {
NSLog(@"开始请求:%@", _httpUrl);
} //第一步,创建URL
NSURL *url = [NSURL URLWithString:_httpUrl];
//第二步,创建请求
NSMutableURLRequest *request = [[NSMutableURLRequest alloc]initWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:DEFAULT_HTTP_TIMEOUT];
[request setHTTPMethod:@"POST"];//设置请求方式为POST,默认为GET
[request addValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[request addValue:HTTP_HEADER_VALUE forHTTPHeaderField:HTTP_HEADER_KEY]; NSData *bodyData = nil;
if([param isKindOfClass:[NSString class]]){
bodyData = [param dataUsingEncoding:NSUTF8StringEncoding];
} else if ([param isKindOfClass:[NSData class]]){
bodyData = param;
} else if ([param isKindOfClass:[NSNumber class]]) {
bodyData = [[param stringValue] dataUsingEncoding:NSUTF8StringEncoding];
} [request setHTTPBody:bodyData]; //第三步,连接服务器 _connect = [[NSURLConnection alloc] initWithRequest:request delegate:self];
if(_connect){
_receiveData = [NSMutableData data];
}
} //接收到服务器回应的时候调用此方法
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
[_receiveData setLength:0];
if([_delegate respondsToSelector:@selector(didReceiveResponse:identify:)])
[_delegate didReceiveResponse:response identify:_identify];
}
//接收到服务器传输数据的时候调用,此方法根据数据大小执行若干次
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
[_receiveData appendData:data];
if([_delegate respondsToSelector:@selector(didReceiveData:identify:)])
[_delegate didReceiveData:data identify:_identify];
}
//数据传完之后调用此方法
-(void)connectionDidFinishLoading:(NSURLConnection *)connection
{
if(DEBUG){
NSLog(@"请求后台数据完成---:%@",_identify);
} if(DEBUG){
NSString *receiveStr = [[NSString alloc] initWithData:_receiveData encoding:NSUTF8StringEncoding];
NSLog(@"%@",receiveStr);
} if([_delegate respondsToSelector:@selector(didFinishLoading:identify:)])
[_delegate didFinishLoading:_receiveData identify:_identify];
}
//网络请求过程中,出现任何错误(断网,连接超时等)会进入此方法
- (void)connection:(NSURLConnection *)connection
didFailWithError:(NSError *)error
{
if(DEBUG){
NSLog(@"%@",[error localizedDescription]);
} if([_delegate respondsToSelector:@selector(didFailWithError:identify:)])
[_delegate didFailWithError:error identify:_identify];
else {
[AlertViewHelper alertMessage:HTTP_CONNECT_ERROR];
}
} @end
分享一个自己用的Objective-C的Http接连类的更多相关文章
- 分享一个手机端好用的jquery ajax分页类
分享一个手机端好用的jquery ajax分页类 jquery-ias.min.js 1,引入jquery-ias.min.js 2,调用ajax分页 <script type="te ...
- 分享一个简单的C#的通用DbHelper类(支持数据连接池)
每次新项目的时候,都要从头去找一遍数据库工具类.这里分享一个简单实用的C#的通用DbHelper工具类,支持数据连接池. 连接池配置 <connectionStrings> <add ...
- 分享一个SQLSERVER脚本(计算数据库中各个表的数据量和每行记录所占用空间)
分享一个SQLSERVER脚本(计算数据库中各个表的数据量和每行记录所占用空间) 很多时候我们都需要计算数据库中各个表的数据量和每行记录所占用空间 这里共享一个脚本 CREATE TABLE #tab ...
- 分享一个MySQL分库分表备份脚本(原)
分享一个MySQL分库备份脚本(原) 开发思路: 1.路径:规定备份到什么位置,把路径(先判断是否存在,不存在创建一个目录)先定义好,我的路径:/mysql/backup,每个备份用压缩提升效率,带上 ...
- 分享一个与ABP配套使用的代码生成器源码
点这里进入ABP系列文章总目录 分享一个与ABP配套使用的代码生成器源码 真对不起关注我博客的朋友, 因最近工作很忙, 很久没有更新博客了.以前答应把自用的代码生成器源码共享出来, 也一直没有时间整理 ...
- 分享一个常用Adb命令
分享一个常用Adb命令 首先 首先感谢@xuxu的常用adb命令,收益良多,但是已经不能满足于我,所以补充了下. 再者 好久没发帖了,最近论坛老司机们都在讨论/总结,我就用这个干货回报吧. 最后 基于 ...
- 福利到~分享一个基于jquery的智能提示控件intellSeach.js
一.需求 我们经常会遇到[站内搜索]的需求,为了提高用户体验,我们希望能做到像百度那样的即时智能提示.例如:某公司人事管理系统,想搜索李XX,只要输入“李”,系统自然会提示一些姓李的员工,这样方便用户 ...
- 分享一个oraclehelper
分享一个拿即用的oraclehelper 首先要引用本机中的oralce access,如果是64位的话,也必须是64位运行,不然会报连接为空connection 等于null. using Orac ...
- 分享一个ruby网站 | 菜鸟教程
http://www.runoob.com/ruby/ruby-tutorial.html 分享一个ruby网站.
- 分享一个批量导出当前实例下的所有linkedserver脚本
分享一个批量导出当前实例下的所有linkedserver脚本 很多时候,我们都需要导出实例下面的登录用户,job,linkedserver等等 导出job比较复杂,下午写了一个脚本把所有的linked ...
随机推荐
- Entity Framework学习 - 3.关联查询
1.Inner Join(默认) var Goods = from goods in db.T_Goods join types in db.T_GoodsTyp ...
- Ubuntu对FireFox安装flash插件
有时候我们需要在Ubuntu下采用手动安装一些软件,比如Firefox的Flash插件.Adobe® Flash® Player 是一款轻量级浏览器插件,具有丰富的 Internet 应用运行时间,提 ...
- 命令 tar & zip
安装zip yum install -y unzip zip: tar-c: 建立压缩档案-x:解压-t:查看内容-r:向压缩归档文件末尾追加文件-u:更新原压缩包中的文件 这五个是独立的命令,压缩解 ...
- BZOJ 2751 容易题
题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=2751 题意:有一个数列A已知对于所有的A[i]都是1到n的自然数,并且知道对于一些A[i ...
- How to: Run Tests from Microsoft Visual Studio
https://msdn.microsoft.com/en-us/library/ms182470.aspx Running Automated Tests in Visual Studio Visu ...
- 解决eclipse-helios中Errors running builder JavaScript Validator的问题
原文:http://blog.ywxyn.com/index.php/archives/713 解决eclipse-helios中Errors running builder JavaScript V ...
- R语言AMORE包实现BP神经网络——German数据集
library(AMORE)data<-read.table('G:\\dataguru\\ML\\ML09\\基于BP网络的个人信贷信用评估\\基于BP网络的个人信贷信用评估\\german. ...
- 51nod1379 索函数
果断打表找规律.然后看得出来是2^k-1之后又不知道怎么求出k有什么卵用... http://blog.csdn.net/guhaiteng/article/details/52094210 %%%% ...
- ASP.NET 时间方法大全
DateTime dt = DateTime.Now; //当前时间 DateTime startWeek = dt.AddDays(- Convert.ToInt32(dt.DayOfWeek.To ...
- Maven之 学习资料
整理maven的学习资料,长期更新. 一.视频 1.孔浩老师的 maven视频教程 二.博客 1.黄勇: maven那些事儿 使用 OSC Maven 仓库 三.书籍 1.<Maven ...