本人亲自写的一套http访问类库推荐给大家使用。

本人在开发过程中,因为各种原因。自己开发了一套HTTP访问工具,该工具借监了目前大家都使和的ASI类库。个人感觉得ASI里面太多的控制及逻辑变量都写在同一个类中,没有很好的规划好。同时可能是由于多个人的修改,使得ASI不同的版本出现了不同的兼容方式。同时也不可避免的增辑了对该代码的维护。

出于本人的开发经验自己写了一套这样的类库,基本上与ASI的功能上差不太多,但是对存在的未知BUG及使用过程中出现的问题,也希望各读者在使用时将BUG反馈给我,以便修正。同时我把这套原码放在我的GITHUB上。供大家使用。希望大家多多支持我。

GITHUB地址:https://github.com/fengsh998/WebRequestComponent

该类库使用简单,代码通俗易懂,使用OOP进行划分,使得结构更加清晰,更易维护。

类库的类结构图:

类关系图:

类库的运行原理图:

类库说明:

1.        使用GCD线程管理,使用异步请求方式(暂不支持同步请求)。

2.        支持SSL,proxy(http,socket5),cookie。

3.        支持http断点续传(下载),支持上传、下载进度回调。

4.        支持队列请求,并发请求,组请求。

5.        支持常见http请求,(POST,GET,DELETE,PUT)

6.        支持重定向。

7.        支持GZIP请求。

类库为非ARC模式。

类库支持环境:

IOS:

Xcode 4.6以上。

Mac 10.8.5  xcode5.0以上。只支持64位编译,32位机的没有做适配。所以低版本的XC编译会有问题。

类库依赖:

依赖:

ios :UIKit.framework,mobileCoreServices.framework

mac :systemConfiguration.framework,cocoa.framework,appkit.framework

sdk依赖(ios,mac共同依赖):CFNewwork.framework,libz.dylib,Foundation.framework

类库的代理说明:

@protocolFQWebRequestDelegate <NSObject>

@optional

- (void)requestStarted:(FQWebRequest *)request;

- (void)requestFinished:(FQWebRequest *)request;

- (void)requestFailed:(FQWebRequest *)request;

/*

当前请求需要证书认证时

字点中使用的Key为

FQWebAuthenticationUsername

FQWebAuthenticationPassword

*/

- (NSDictionary*)authenticationNeededForRequest:(FQWebRequest *)request;

- (NSDictionary*)proxyAuthenticationNeededForRequest:(FQWebRequest *)request;

/*

该网站的安全证书不受信任!此时提示仍然继续还是返回安全连接

如果返回True,则使用不安全连接继续访问,FALSE则此次访问失败

*/

- (BOOL)isContinueWhenUnsafeConnectInCureentRequest:(FQWebRequest *)request;

/*

接收到的进度

*/

- (void)requestReceviceProgress:(FQWebRequest *)request

withTotalSize:(FQULLInteger) total withRecvicedSize:(FQULLInteger)size;

/*

发送进度

*/

- (void)requestSendProgress:(FQWebRequest *)request

withTotalSize:(FQULLInteger) total withSendSize:(FQULLInteger)size;

@end

@protocolFQWebRequestProgressDelegate <FQWebRequestDelegate>

@optional

/*

当有数据下发时会触发

*/

- (void)downloadProgress:(FQWebRequest *)request

withTotalSize:(FQULLInteger) total

withRecvicedSize:(FQULLInteger)size;

/*

当有post数据时会触发

*/

- (void)uploadProgress:(FQWebRequest *)request

withTotalSize:(FQULLInteger) total

withUploadsize:(FQULLInteger)size;

@end

@protocol FQWebRequestInGroupDelegate<NSObject>

@optional

- (void)allRequestFinish:(FQWebGroupRequest *)groupRequest;

@end

目前只支持使用delegate进行回调,暂不支持block和SEL的形式进行回调。

POST 样例:

FQWebRequest *test22 =[FQWebRequest
requestWithURL:@"http://nanjing.baixing.com/oz/login/x"];

NSMutableDictionary *items = [NSMutableDictionary
dictionaryWithObjectsAndKeys:@"keep-alive",@"Connection",

@"*/*",@"Accept",

@"gzip,deflate",@"Accept-Encoding",

@"zh-CN,zh;q=0.8,en;q=0.6",@"Accept-Language",

@"application/x-www-form-urlencoded",@"Content-Type",

nil];

NSString *pd =
@"identity=fengsh998&password=13870021792&token=a86d0f446368b94e97f83b309d8cb303";

NSData *data = [pd
dataUsingEncoding:NSUTF8StringEncoding];

[test22 setPostData:[NSMutableData
dataWithData:data]];

test22.delegate =
self;

[test22.requestHeader
setRequestHeaderByDictionary:items];

[test22 setRequestMethod:requestUsePost];

[test22 go];

GET 样例:

NSMutableDictionary *items = [NSMutableDictionary
dictionaryWithObjectsAndKeys:@"keep-alive",@"Connection",

@"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",@"Accept",

@"gzip,deflate",@"Accept-Encoding",

//@"gzip",@"Accept-Encoding",

@"zh-CN,zh;q=0.8,en;q=0.6",@"Accept-Language",

nil];

FQWebRequest *test1 =[FQWebRequest
requestWithURL:@"http://www.google.com.hk"];

[test1.requestHeader
setRequestHeaderByDictionary:items];

[test1 setRequestMethod:requestUseGet];

//test1.autoSaveUseCookies=YES;

[test1 go];

类点下载样例:

weq = [FQDownLoadRequest
requestWithURL:@"http://a.tgbus.com/download/33747/1"];

NSMutableDictionary *items = [NSMutableDictionary
dictionaryWithObjectsAndKeys:

@"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",@"Accept",

@"gzip,deflate,sdch",@"Accept-Encoding",

@"zh-CN,zh;q=0.8,en;q=0.6",@"Accept-Language",

//@"keep-alive",@"Connection",

//@"User-Agent",@"Mozilla/5.0 (Macintosh;Intel Mac OS X 10_8_5)",

//@"",@"",

nil];

[weq
setDownloadStorePath:@"/Users/apple/Desktop/FQDownload"];

[weq.requestHeader
setRequestHeaderByDictionary:items];

//[weq setRequestMethod:requestUseGet];

weq.delegate =
self;

FQWebProxySettings *proxy = [[FQWebProxySettings
alloc]init];

//weq.proxySettings = proxy;

[proxy release];

//weq.proxySettings.proxyHost [email protected]"211.138.121.38";

//weq.proxySettings.proxyPort = 81;

//weq.proxySettings.proxyType = wpProxyHttp;

//weq.useCustomSaveFileName = @"aa.apk";

[weq
setReDownloadFile:@"银行大劫案BankJob.apk.FQDownload" useResume:YES];

[weq go];

POST FORM表单上传样例:

FQUploadRequest *rq = [FQUploadRequest
requestWithURL:@"http://www.mftp.info/upload.php"];

NSMutableDictionary *items = [NSMutableDictionary
dictionaryWithObjectsAndKeys:@"keep-alive",@"Connection",

@"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",@"Accept",

@"gzip,deflate",@"Accept-Encoding",

@"zh-CN,zh;q=0.8,en;q=0.6",@"Accept-Language",

@"application/x-www-form-urlencoded",@"Content-Type",

nil];

[rq.requestHeader
setRequestHeaderByDictionary:items];

FormDataPackage *dp = [[FormDataPackage
alloc]init];

MimePart *filepart = [[MimePart
alloc]init];

[filepart addMimeHeader:@"Content-Disposition"
withValue:@"form-data;name=\"MAX_FILE_SIZE\""];

filepart.bodystring =
@"1000000";

MimePart *filepart1 = [[MimePart
alloc]init];

[filepart1 addMimeHeader:@"Content-Disposition"
withValue:@"form-data;name=\"uploadimg\"; filename=\"银行大劫案BankJob.apk\""];

[filepart1 addMimeHeader:@"Content-Type"
withValue:@"application/octet-stream"];

NSMutableData *md = [NSMutableData
dataWithContentsOfFile:@"/Users/apple/Desktop/FQDownload/银行大劫案BankJob.apk.FQDownload"];

filepart1.bodyFileData = md;

[dp addMultiPart:filepart];

[dp addMultiPart:filepart1];

dp.postBodyType =
postformMultipartData;

//NSData *dt = [dpbuildMultipartFormDataPostBody];

//[rq setRequestMethod:requestUsePost];

//[rq.requestHeadersetRequestHeader:@"Content-Type" value:dp.contentTypeValue];

rq.delegate =
self;

//[rq setPostData:[NSMutableDatadataWithData:dt]];

//[rqsetPostBodyFromFile:@"/Users/apple/Desktop/FQDownload/银行大劫案BankJob.apk.FQDownload"];

[rq setuploadFormData:dp];

[rq go];

对于multi表单类型的form:

FQUploadRequest *rq = [FQUploadRequest
requestWithURL:@"http://www.dumpt.com/img/upload.php"];

NSMutableDictionary *items = [NSMutableDictionary
dictionaryWithObjectsAndKeys:@"keep-aflive",@"Connection",

@"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",@"Accept",

@"gzip,deflate",@"Accept-Encoding",

@"zh-CN,zh;q=0.8,en;q=0.6",@"Accept-Language",

@"application/x-www-form-urlencoded",@"Content-Type",

nil];

[rq.requestHeader
setRequestHeaderByDictionary:items];

FormDataPackage *dp = [[FormDataPackage
alloc]init];

dp.postBodyType =
postformMultipartData;

MimePart *filepart = [[MimePart
alloc]init];

[filepart addMimeHeader:@"Content-Disposition"
withValue:@"form-data;name=\"type\""];

filepart.bodystring =
@"direct";

MimePart *filepart1 = [[MimePart
alloc]init];

[filepart1 addMimeHeader:@"Content-Disposition"
withValue:@"form-data;name=\"userfile[]\"; filename=\"2.png\""];

[filepart1 addMimeHeader:@"Content-Type"
withValue:@"image/png"];

NSMutableData *md = [NSMutableData
dataWithContentsOfFile:@"/Users/apple/Desktop/2.png"];

filepart1.bodyFileData = md;

MimePart *filepart2 = [[MimePart
alloc]init];

[filepart2 addMimeHeader:@"Content-Disposition"
withValue:@"form-data;name=\"userfile[]\"; filename=\"\""];

[filepart2 addMimeHeader:@"Content-Type"
withValue:@"application/octet-stream"];

MimePart *filepart3 = [[MimePart
alloc]init];

[filepart3 addMimeHeader:@"Content-Disposition"
withValue:@"form-data;name=\"userfile[]\"; filename=\"\""];

[filepart3 addMimeHeader:@"Content-Type"
withValue:@"application/octet-stream"];

MimePart *filepart4 = [[MimePart
alloc]init];

[filepart4 addMimeHeader:@"Content-Disposition"
withValue:@"form-data;name=\"userfile[]\"; filename=\"\""];

[filepart4 addMimeHeader:@"Content-Type"
withValue:@"application/octet-stream"];

MimePart *filepart5 = [[MimePart
alloc]init];

[filepart5 addMimeHeader:@"Content-Disposition"
withValue:@"form-data;name=\"userfile[]\"; filename=\"\""];

[filepart5 addMimeHeader:@"Content-Type"
withValue:@"application/octet-stream"];

MimePart *filepart6 = [[MimePart
alloc]init];

[filepart6 addMimeHeader:@"Content-Disposition"
withValue:@"form-data;name=\"x\""];

filepart6.bodystring =
@"64";

MimePart *filepart7 = [[MimePart
alloc]init];

[filepart7 addMimeHeader:@"Content-Disposition"
withValue:@"form-data;name=\"y\""];

filepart7.bodystring =
@"13";

[dp addMultiPart:filepart];

[dp addMultiPart:filepart1];

[dp addMultiPart:filepart2];

[dp addMultiPart:filepart3];

[dp addMultiPart:filepart4];

[dp addMultiPart:filepart5];

[dp addMultiPart:filepart6];

[dp addMultiPart:filepart7];

[rq  setuploadFormData:dp];

rq.delegate =
self;

[rqgo];

本人亲自写的一套http访问类库推荐给大家使用。

时间: 2024-10-20 00:24:48

本人亲自写的一套http访问类库推荐给大家使用。的相关文章

为JSP写的一套核心标签

为JSP写的一套核心标签, 有了这套标签, 根本不需要自定义标签了 (1) 准备 需要standard.jar,jstl.jar两个jar包,放入Tomcat 6.0/lib目录中(或者是/WEB-INF/lib). (2)core <%@tagliburi="http://java.sun.com/jsp/jstl/core" prefix="c"%> forEach循环: ①一般用法,相当普通的for循环: <c:forEach begin =

SOCI、LiteSQL、POCO数据库访问类库对比

最近在做视频的开发,其中视频的设备接入管理服务器.流媒体管理服务器.中心服务器都涉及到了数据库的操作,同时需要兼容大多数版本的数据库,包括mysql.sqlite.oracle.公司原来使用的是ado来进行数据库的开发的, 但是考虑到目前需要兼容linux,目前使用Poco框架封装的数据库模块进行开发. 根据项目情况我对soci.litesql.poco这三个框架进行了简单的学习来确定选择那个框架. 1.soci soci是c++数据库访问类库,目前支持MySQL.Oracle.PostgreS

自己亲自写的两本linux资料,免费下载,pdf文档

第一本是我写的韩顺平老师解说的linux视频的笔记,该视频原本有21讲,可是我始终没有找到当中的17.18讲.可是其它部分我感觉及记录的还是蛮认真的.该套视频解说的非常基础,因此我的这本笔记也非常基础.这里是免积分在csdn上的下载地址:linux笔记下载 ,假设左边的地址挂了,能够用http://download.csdn.net/detail/xinguimeng/7725583 来下载,假设您是百度网盘的忠有用户,它的百度网盘的分享地址:linux笔记百度网盘  .假设左边的地址挂了,能够

如何上传项目到百度云,让你写的东西网址可以访问到

1首先安装小乌龟SVN(也可以用git)百度云里面有64位的直接安装就好(资源http://pan.baidu.com/s/1bDnOUa) 2百度搜索:百度云开发平台 第一个就是 3登录百度云(没账号自己注册) 4点击管理控制台进入主页 5点击基础版(首次使用点下面红笔里面的如果创建过就在上面红笔里面有记录) 6点击添加部署(部署即网址) 7模板照着选 8点击下一步 9点击确认 10返回部署 11部署里面就创建好了zhaoxiaowei1显示创建中3秒后刷新页面 12显示正常 13随便哪个地方

闲来无事写了一套 Jenkins 主题样式:刀锋

背景 Jenkins 的前端 CSS 样式坚挺了这么多年已经觉得腻的不行了,于是想换个风格缓解一下视觉疲劳,便有了这个项目.由于本人不是前端,所以很多只是随便改改,有些复杂的需求也实现不了,但是总的来说,使用还是将就能用.当然,由于新版本项目还是热乎的,所以肯定会有很多兼容性的问题,也欢迎有机会的人能够在评论区或者其他方式给我提出来. 配置 Jenkins 自定义 CSS 样式 做这个之前,首先需要安装一个插件:Simple Theme Plugin 安装完成后重启 Jenkins,此时在系统配

MAC Intellij IDEA 经常使用快捷键(本人亲自測试过)

 MAC Intellij IDEA 经常使用快捷键 keymap 设置 MAC OS X 10.5+ alt+f7查找变量方法使用的地方 F3加入书签 Ctrl + O快捷覆写方法 Alt + F3 加入书签标识 command + F3 显示书签 command + Shift + A 查找动作 Alt + F1 快捷选择 command+alt+f7 这个是查找选中的字符在project中出现的地方,能够不是方法变量类等,这个和上面的有差别的 command+F7能够查询当前元素在当前文件

关于jQuery的Ajax异步请求,本人喜欢写笔记,写的不好还望见谅

<form id="myform" name="myform" > 用户名:<input type="text" id="username" name="username"><br> 密码:<input type="text" id="password" name="password"><br&

2018-07-14期 ZK编程案例-分布式协调【本人亲自反复验证通过分享】

利用ZK监听器实现分布式协调服务,即实现服务端服务健康状态的实时监测. 1.编写一个服务端程序,实现原理: (1)服务端程序启动后,开启Socket监听 (2)开启Socket监听后,将自己监听Socket身份信息临时写入Zookeeper集群 (3)服务关闭后,Zookeeper集群自动将该服务身份信息从ZK集群清除 实现代码 package cn.itcast.zk.distributeserver; import java.io.BufferedReader; import java.io

RabbitMQ消息队列(本人亲自中文翻译)

最近几天会尽快把RabbitMQ学习完毕,在这之后会把消息队列的英文注释全部手打翻译成纯中文注释,读者就不用自己再去读英文解释了!