利用ASIHTTPRequest访问网络
ASIHTTPRequest是第三方类库,ASIHTTPRequest对CFNetwork API进行了封装。
有如下特点:
- l 通过简单的接口,即可完成向服务端提交数据和从服务端获取数据的工作
- l 下载的数据,可存储到内存中或直接存储到磁盘中
- l 能上传本地文件到服务端
- l 可以方便的访问和操作请求和返回的Http头信息
- l 可以获取到上传或下载的进度信息,为应用程序提供更好的体验
- l 支持上传或下载队列,并且可获取队列的进度信息
- l 支持基本、摘要和NTLM身份认证,在同一会话中授权凭证会自动维持,并且可以存储在Keychain(Mac和iOS操作系统的密码管理系统)中
- l 支持Cookie
- l 当应用(iOS 4+)在后台运行时,请求可以继续运行
- l 支持GZIP压缩数据
- l 内置的ASIDownloadCache类,可以缓存请求返回的数据,这样即使没有网络也可以返回已经缓存的数据结果
- l ASIWebPageRequest –可以下载完整的网页,包括包含的网页、样式表、脚本等资源文件,并显示在UIWebView /WebView中。任意大小的页面都可以无限期缓存,这样即使没有网络也可以离线浏览
- l 支持客户端证书
- l 支持通过代理发起Http请求
- l 支持带宽限制。在iOS平台,可以根据当前网络情况来自动决定是否限制带宽,例如当使用WWAN(GPRS/Edge/3G)网络时限制,而当使用WIFI时不做任何限制
- l 支持断点续传
- l 支持同步和异步请求
第一、同步请求:
ASIHTTPRequest *httpRequest=[ASIHTTPRequest requestWithURL:url];
[httpRequest setRequestMethod:@"GET"];
[httpRequest setTimeOutSeconds:60];
[httpRequest startSynchronous];
NSError *error=httpRequest.error;
if(error==nil)
{
NSData *data=httpRequest.responseData;
UIImage *image=[UIImage imageWithData:data];
self.image=image;
}else
{
NSLog(@"请求网络错误");
}
第二、异步请求:
用delegate实现:
-(void)asynchronous:(NSURL*)url
{
ASIHTTPRequest *httpRequest=[ASIHTTPRequest requestWithURL:url];
[httpRequest setRequestMethod:@"GET"];
[httpRequest setTimeOutSeconds:60]; httpRequest.delegate=self;
[httpRequest startAsynchronous]; }
#pragma mark - ASIHTTPRequest delegate
- (void)requestFinished:(ASIHTTPRequest *)request
{
UIImage *image=[UIImage imageWithData:request.responseData];
self.image=image;
}
- (void)requestFailed:(ASIHTTPRequest *)request
{
NSError *error=request.error;
NSLog(@"请求出错:%@",error);
}
用block实现:
ASIHTTPRequest *httpRequest=[ASIHTTPRequest requestWithURL:url];
[httpRequest setRequestMethod:@"GET"];
[httpRequest setTimeOutSeconds:60]; //httpRequest.delegate=self;
[httpRequest setCompletionBlock:^{
UIImage *image=[UIImage imageWithData:httpRequest.responseData];
self.image=image;
}];
[httpRequest setFailedBlock:^{
NSError *error=httpRequest.error;
NSLog(@"请求出错:%@",error); }];
[httpRequest startAsynchronous];
Block 回调:
- (void)setStartedBlock:(ASIBasicBlock)aStartedBlock;
- (void)setHeadersReceivedBlock:(ASIHeadersBlock)aReceivedBlock;
- (void)setCompletionBlock:(ASIBasicBlock)aCompletionBlock;
- (void)setFailedBlock:(ASIBasicBlock)aFailedBlock;
- (void)setBytesReceivedBlock:(ASIProgressBlock)aBytesReceivedBlock;
- (void)setBytesSentBlock:(ASIProgressBlock)aBytesSentBlock;
- (void)setDownloadSizeIncrementedBlock:(ASISizeBlock) aDownloadSizeIncrementedBlock;
- (void)setUploadSizeIncrementedBlock:(ASISizeBlock) anUploadSizeIncrementedBlock;
- (void)setDataReceivedBlock:(ASIDataBlock)aReceivedBlock;
第四、缓存策略
NSString *cathPath=[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];
ASIDownloadCache *cache=[[ASIDownloadCachealloc]init];
[cache setStoragePath:cathPath];
cache.defaultCachePolicy=ASIOnlyLoadIfNotCachedCachePolicy;
//持久缓存,一直保存在本地
httpRequest.cacheStoragePolicy = ASICachePermanentlyCacheStoragePolicy;
httpRequest.downloadCache=cache;
[httpRequest startAsynchronous];
//监听数据的来源
if (httpRequest.didUseCachedResponse) {
NSLog(@"data is from cache");
}else
{
NSLog(@"data is form net");
}
利用ASIHTTPRequest访问网络的更多相关文章
- 利用Handler访问网络数据
废话不多白吃,代码如下: 1.MainActivity package com.yz.day11_22_handler;import android.app.Activity;import andro ...
- Android网络:HTTP之利用HttpURLConnection访问网页、获取网络图片实例 (附源码)
http://blog.csdn.net/yanzi1225627/article/details/22222735 如前文所示的TCP局域网传送东西,除了对传输层的TCP/UDP支持良好外,Andr ...
- Android利用Fiddler进行网络数据抓包
最新最准确内容建议直接访问原文:Android利用Fiddler进行网络数据抓包 主要介绍Android及IPhone手机上如何进行网络数据抓包,比如我们想抓某个应用(微博.微信.墨迹天气)的网络通信 ...
- Android利用Fiddler进行网络数据抓包,手机抓包工具汇总
Fiddler抓包工具 Fiddler抓包工具很好用的,它可以干嘛用呢,举个简单例子,当你浏览网页时,网页中有段视频非常好,但网站又不提供下载,用迅雷下载你又找不到下载地址,这个时候,Fiddler抓 ...
- Android利用Fiddler进行网络数据抓包【怎么跟踪微信请求】
主要介绍Android及IPhone手机上如何利用Fiddler进行网络数据抓包,比如我们想抓某个应用(微博.微信.墨迹天气)的网络通信请求就可以利用这个方法. Mac 下请使用 Charles 代替 ...
- android4.0以上访问网络不能在主线程中进行以及在线程中操作UI的解决方法
MONO 调用一个线程操作UI 然后报Only the original thread that created a view hierarchy can touch its views.错误 goo ...
- Android使用Http协议访问网络——HttpConnection
套路篇 使用HttpConnection访问网络一般有如下的套路: 1.获取到HttpConnection的实例,new出一个URL对象,并传入目标的网址,然后调用一下openConnection() ...
- IOS开发---菜鸟学习之路--(十二)-利用ASIHTTPRequest进行异步获取数据
想要实现异步获取的话我这边了解过来有两个非常简单的方式 一个是利用ASIHTTPRequest来实现异步获取数据 另一个则是利用MBProgressHUD来实现异步获取数据 本章就先来讲解如何利用AS ...
- [转] Android利用Fiddler进行网络数据抓包
主要介绍Android及IPhone手机上如何利用Fiddler进行网络数据抓包,比如我们想抓某个应用(微博.微信.墨迹天气)的网络通信请求就可以利用这个方法. Mac 下请使用 Charles 代替 ...
随机推荐
- python selenium点滴
from selenium import webdriver from selenium.webdriver.common.keys import Keys driver = webdriver.Ch ...
- JPA报错, java.lang.NullPointerException
java.lang.NullPointerException 我觉得这应该是一个很常见的错误, 数据库没取到数据嘛, 很正常, JPA没取到数据就是会抛出空指针异常, 但是就是这么简单的一个错误也让我 ...
- 【校招面试 之 C/C++】第17题 C 中的malloc相关
1.malloc (1)原型:extern void *malloc(unsigned int num_bytes); 头文件:#include <malloc.h> 或 #include ...
- python之函数(function)
#今天来学习一下函数,function# 定义一个函数的时候,函数不会被执行,只有调用函数,函数才会执行## 定义函数# # 1.def是创建函数的关键字,创建函数# # 2.函数名# # 3.()# ...
- day4:vcp考试
Q61. Which two statements are true regarding Virtual SAN Fault Domains? (Choose two.)A. They enable ...
- 数字组合 · Combination Sum
不能重复: [抄题]: 给出一个候选数字的set(C)和目标数字(T),找到C中所有的组合,使找出的数字和为T.C中的数字可以无限制重复被选取. 例如,给出候选数组[2,3,6,7]和目标数字7,所求 ...
- iOS - 上架的APP 生成二维码下载
1.首先打开苹果App Store商店进入到里面,找到需要打开链接地址的应用程序,例如:百度. 2. 在App Store商店里面先点击一下应用程序图标,再按一下…分享按钮. 3. 接着选择分享APP ...
- Mybatis的分页插件PageHelp:Page对象中的pageSize等属性无法序列化,无法转换为json字符串
Page<User> page = new Page<>(); User user = new User(); user.setAge(20); ...
- JSP标准标签库JSTL
1.什么是JSTL? JSP标准标签库(JSP Standard Tag Library) 2.JSTL标准标签库中的常用标签 JSTL是JSP页面的标签库,实质上是一段Java代码.我们常用的是它的 ...
- springmvc将处理后的数据通过get方法传给页面时,可能会出现乱码。下面对于get请求中文参数出现乱码提出解决办法。
对于get请求中文参数出现乱码解决办法有两个: 1.修改tomcat配置文件(tomcat--->conf--->server.xml)添加编码与工程编码一致,如下: <Connec ...