使用iOS SDK中的HTTP网络请求API,相当的复杂,调用很繁琐,ASIHTTPRequest就是一个对CFNetwork API进行了封装,并且使用起来非常简单的一套API,用Objective-C编写,可以很好的应用在Mac OS X系统和iOS平台的应用程序中。ASIHTTPRequest适用于基本的HTTP请求,和基于REST的服务之间的交互。
ASIHTTPRequest功能非常强大,主要特色如下:

  • 通过简单的接口,即可完成向服务端提交数据和从服务端获取数据的工作。
  • 下载的数据,可存储到内存中或直接存储到磁盘中。
  • 能上传本地文件到服务端。
  • 可以方便的访问和操作请求和返回的HTTP头信息。
  • 可以获取到上传或下载的进度信息,为应用程序提供更好的体验。
  • 支持上传或下载队列,并且可获取队列的进度信息。
  • 支持基本、摘要和NTLM身份认证,在同一会话中授权凭证会自动维持,并且可以存储在Keychain(Mac和iOS操作系统的密码管理系统)。
  • 支持Cookie
  • 当应用(iOS 4+)在后台运行时,请求可以继续运行。
  • 支持GZIP压缩数据。
  • 内置的ASIDownloadCache类,可以缓存请求返回的数据,这样即使没有网络也可以返回缓存的数据结果。
  • ASIWebPageRequest——可以下载完整的网页,包括包含的网页、样式表、脚本等资源文件,并显示在UIWebView/WebView中。任意大小的页面都可以无限期缓存,这样即使没有网络也可以离线浏览。
  • 支持客户端证书
  • 支持通过代理发起HTTP请求
  • 支持带宽限制。在iOS平台,可以根据当前网络情况来自动决定是否限制带宽,例如当使用WWAN(GPRS/Edge/3G)网络时限制,而当使用WIFI时不做任何限制。
  • 支持断点续传
  • 支持同步和异步请求

在项目中简单配置即可使用ASIHTTPRequest:
可以通过以下两种方式往一个Xcode项目中添加第三方类库文件:
1. 拖放到项目中。如果类库文件没有拷贝到项目文件目录,则拷贝时要选中”Copy items into destination group's folder“的复选框。

2. 在Xcode中,右键点击项目文件弹出菜单中选择”Add Files to XXX Project“菜单,在文件浏览对话框中选择要添加的文件到项目中。同样地,如果类库文件没有拷贝到项目文件目录,则拷贝时要选中”Copy items into destination group's folder“的复选框。

根据这两种方式之一,添加ASIHTTPRequest相关文件到Xcode项目中。然后进行链接类库的操作,这一步很重要:
 1. 选择项目
 2. 选择目标Target
 3. 跳转到”Build Phases“标签项
 4. 展开”Link Binary With Libraries“分组
 5. 点击”+“添加类库

6. 从列表中选择CFNetwork.framework,然后点击”Add“按钮。

7. 按照上一步方法添加:SystemConfiguration.framework,MobileCoreServices.framework,CoreGraphics.framework和libz.1.2.3.dylib这几个类库。
 8. 添加完后,可以将添加好的类库拖到Xcode项目的Frameworks目录下。

 使用说明:
在完成上述正确安装配置后,在需要用到ASIHTTPRequest的代码文件头部,引入:
#import "ASIHTTPRequest.h"这句即可使用它的相关类。

示例:创建一个同步请求
这是ASIHTTPRequest最简单的一种使用模式,发送startSynchronous消息后即开始在同一线程中执行HTTP请求,线程将一直等待直到请求结束(请求成功或者失败)。通过检查error属性可以判断请求是否成功或者有错误发生。 要获取返回的文本信息,调用responseString方法。如果下载的是二进制文件,如图片、MP3,则调用responseData方法,可以得到一个NSData对象。代码如下:

 1 - (IBAction)grabURL:(id)sender
 2 {
 3      NSURL  *url = [NSURL  URLWithString:@"http://www.cnblogs.com"];
 4      ASIHTTPRequest  *request = [ASIHTTPRequest  requestWithURL:url];
 5      [request  startSynchronous];
 6      NSError  *error = [request error];
 7      if(!error) {
 8           NSString *response = [request  responseString];
 9      }
10 }

一般情况下,应该优先使用异步请求来代替同步请求,当在主线程中使用ASIHTTPRequest同步请求,应用程序的界面会锁定,无法进行任何操作,直到请求完成。

示例:创建一个异步请求
异步请求是在后台线程中运行,当请求执行完后再通知调用的线程。这样不会导致主线程进行网络请求时,界面被锁定等情况。

 1 - (IBAction)grabURLInBackground:(id)sender
 2 {
 3      NSURL  *url = [NSURL  URLWithString:@"http://www.cnblogs.com"];
 4      ASIHTTPRequest  *request = [ASIHTTPRequest  requestWithURL:url];
 5      [request  setDelegate:self];
 6      [request  startAsynchronous];
 7 }
 8
 9 - (void)requestFinished:(ASIHTTPRequest *)request
10 {
11     //当以文本形式读取返回内容时用这个方法
12     NSString  *responseString = [request responseString];
13
14     //当以二进制形式读取返回内容时用这个方法
15     NSData  *responseDate = [request  responseData];
16 }
17
18 - (void)requestFailed:(ASIHTTPRequest *)request
19 {
20     NSError  *error = [request  error];
21 }

关于Xcode4.2下编译”ASIHTTPRequest“开源项目的代码时,出现”Declaration of ’struct sockaddr_in' will not be visible outside of this function“错误的解决方法:

引入头文件:#import <netinet/in.h>

ASIHTTPRequest类库简介和使用说明相关推荐

  1. ASIHTTPRequest类库简介

    参考来自:http://www.cnblogs.com/dotey/archive/2011/05/10/2041966.html 官方网站: http://allseeing-i.com/ASIHT ...

  2. GalHttprequest类库简介——android平台上的一个轻量级的http网络请求及缓存框架

    2019独角兽企业重金招聘Python工程师标准>>> GalHttprequest名字的由来 开发过iOS项目的朋友都应该知道 ASIHTTPRequest类库, ASIHTTPR ...

  3. c++中algorithm头文件、STL库简介及使用说明

    c++中algorithm头文件.STL库简介及使用说明 c++中algorithm头文件是STL的算法部分,里边定义了各种算法,比如sort之类的.加上algorithm就可以使用stl库里的各种算 ...

  4. 【Java程序设计】Java基础类库简介

    Java基础类库简介 文章目录 Java基础类库简介 一.Java基础类库介绍 二.语言包(java.lang) (1)数据类型包裹类 1.生成数据类型包裹类对象的方法 2.得到基本数据类型数据的方法 ...

  5. 《社会调查数据管理——基于Stata 14管理CGSS数据》一1.5 本书简介和使用说明...

    本节书摘来自异步社区<社会调查数据管理--基于Stata 14管理CGSS数据>一书中的第1章,第1.5节,作者 唐丽娜,更多章节内容可以访问云栖社区"异步社区"公众号 ...

  6. [Guava源码日报(1)]Guava类库简介

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/SunnyYoona/article/details/50805613 1. 简介 Guava工程包含 ...

  7. 探测工具nmap简介及使用说明

    1. 前言: 在前一遍Jmeter模拟多IP访问中,提到当前网络中可用ip,如何查找查看当前可用ip,nmap就是一个不错的开源免费的探测主机是否在网的工具. 另外当我们在构建环境或排查问题时,常常是 ...

  8. .Net解析html文档类库HtmlAgilityPack完整使用说明

    在前几篇文章中([搜房网房产数据采集程序demo--GeckoWebBrowser实例] )都有提到一个解析html的C#类库HtmlAgilityPack, 今天终于有时间整理一下,并把Demo分享 ...

  9. VLC简介及使用说明

    From: http://blog.csdn.net/jianxi258/article/details/6006307 一.简介     VLC的全名是Video Lan Client,是一个开源的 ...

最新文章

  1. php扩展的框架,新一代轻量级PHP扩展框架 Asf
  2. php-fpm添加service服务
  3. MySQL—06—数据库三大范式
  4. 互金策略若干问题(全)
  5. 【H.264/AVC视频编解码技术详解】七、 熵编码算法(1):基础知识
  6. matplotlib 可视化 —— matplotlib.patches
  7. 动态添加新元素事件无法触发解决方法
  8. web安全:sql 注入
  9. redis数据类型-列表类型
  10. 【Demo】文件下载操作(console版和web版)
  11. 【图像配准】基于surf算法实现图像配准附Matlab代码
  12. LORA 网关上电后对应配置 以及常用的AT指令
  13. ABAP tRFC和qRFC
  14. 6-25漏洞利用-irc后门利用
  15. 贪心算法解题报告(D-Farmer John)
  16. 什么是VR虚拟电子沙盘3D数字沙盘有什么功能
  17. 203. 电子编程入门到工程师--逆推原理图(电源部分)
  18. 从微博搜索相关话题下的所有热门博文链接
  19. 给ROM包内置ROOT权限,刷机以后立马拥有ROOT权限
  20. Exadata健康检查与评估

热门文章

  1. opencv画框返回坐标 python_python opencv鼠标事件实现画框圈定目标获取坐标信息
  2. jq 点击按钮跳转到微信_【看这里】教你用微信小程序登陆全国青少年普法网,方便快捷!...
  3. which和whereis
  4. python 合并 循环list_阿里巴巴鼎力推荐,Python入门至精通,24招加速你的Python
  5. java 中gui的作用_java学习中最应该注意的Java GUI用户界面以何为基础
  6. C语言整数加法器,【菜鸟解析】C++大数加法器的实现
  7. 禄露禄露碌脛脥炉脛锚,学者批时下宫廷戏“就是一堆文化垃圾”
  8. 树莓派:和电脑之间的串口编程,以及树莓派的备份
  9. oracle数据抽取脚本,oracle的一些信息抽取脚本.sql
  10. 最小化安装时没有ifconfig命令,没有firewalld.service