ASI简单实现网络编程

  使用iOS SDK中的HTTP网络请求API,相当的复杂,调用比较麻烦,ASIHTTPRequest 对CFNetwork API进行了封装,并且使用起来非常简单的一套API,在很多比较老旧的项目依然存在,因此大家仍然需要熟悉ASI的使用。下面我们一起学习研究一下ASI的简单使用。

一、环境搭建

1、首先下载asi包,并且引入下面文件:http://allseeing-i.com/ASIHTTPRequest/

2、增加框架

二、使用方法

  1、发送同步GET请求,直接调用startSynchronous方法即可,下面的服务地址自己可以自己搭建,发送请求后调用请求的responseData属性便获取到返回的数据:

- (void)sync{
    NSURL *url=[NSURL URLWithString:@"http://192.168.2.162/logo.php?userName=jereh&pwd=123"];
    ASIHTTPRequest * requst=[[ASIHTTPRequest alloc] initWithURL:url];
 //设置超时时间
    requst.timeOutSeconds=3;

    //发送同步请求
    [requst startSynchronous];

    if(requst.error){
        NSLog(@"请求出错了,%@",requst.error);
    }else {
        NSData * data=requst.responseData;
        NSDictionary * dic=[NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
        NSLog(@"%@",dic);
    }

}

  2、发送异步GET请求,直接调用startAsynchronous方法即可,异步和同步稍有不同,使用代理接受数据

- (void)async{
    dataResult=[NSMutableData data];
    NSURL *url=[NSURL URLWithString:@"http://192.168.2.162/logo.php?userName=jereh&pwd=123"];
    ASIHTTPRequest * requst=[[ASIHTTPRequest alloc] initWithURL:url];
    self.request=requst;
    requst.timeOutSeconds=3;
    requst.delegate=self;
    [requst startAsynchronous];

}

//开始发送请求
- (void)requestStarted:(ASIHTTPRequest *)request{
}
//失败的时候调用
- (void)requestFailed:(ASIHTTPRequest *)request{
 NSLog(@"===requestFailed");
}
//接收数据调用,如果文件过大分多次调用,此处需要拼接返回的data
- (void)request:(ASIHTTPRequest *)request didReceiveData:(NSData *)data{
    [dataResult appendData:data];
}
//请求结束后解析数据
- (void)requestFinished:(ASIHTTPRequest *)request{
    NSDictionary * dic=[NSJSONSerialization JSONObjectWithData:dataResult options:NSJSONReadingMutableContainers error:nil];

}

  3、使用块来实现异步GET请求,因为当面对多个请求的时候采用代理的方式稍微显得有点麻烦,比如在拼接数据的时候需要判断当前是哪个请求,然后根据请求对象地址来确定采取哪种拼接,所以,在处理多个请求的时候用块比较有优势

- (void) asyncFormBlock{

    NSURL *url=[NSURL URLWithString:@"http://192.168.2.162/loginPost.php"];

    ASIFormDataRequest * request=[ASIFormDataRequest requestWithURL:url];

    //设置请求参数
    [request setPostValue:@"jereh" forKey:@"userName"];
    [request setPostValue:@"123" forKey:@"pwd"];
    [request startAsynchronous];

    //请求完成后解析数据
    [request setCompletionBlock:^{
        NSDictionary * dic=[NSJSONSerialization JSONObjectWithData:dataResult options:NSJSONReadingMutableContainers error:nil];
        NSLog(@"%@",dic);
    }];

    //开始接收的时候调用
    [request setDataReceivedBlock:^(NSData *data) {
        [dataResult appendData:data];
    }];

    //失败的时候调用
    [request setFailedBlock:^{

    }];

}

  4、同步Post请求的实现,Post请求和get不同,这里需要拼接条件,而且这次用到的类也稍微不同ASIFormDataRequest,除此之外基本类似。代码如下:

ASIFormDataRequest * request=[ASIFormDataRequest requestWithURL:url];

    //设置请求参数
    [request setPostValue:@"jereh" forKey:@"userName"];
    [request setPostValue:@"123" forKey:@"pwd"];
    request.timeOutSeconds=3;

    [request startSynchronous];

  5、异步的Post请求我就不用说了吧?相信大家能写出来

  6、下载,在涉及到网络的时候必然涉及到网络的下载和上传,ASI对文件的下载封装的非常好,我们用起来非常的简单,下面我们通过一个进度条显示下载进度,效果图如下:

- (void)asyncDowload{

    NSURL * url=[NSURL URLWithString:@"http://192.168.1.107/test.rar"];
    ASIHTTPRequest * request=[ASIHTTPRequest requestWithURL:url];
 NSString * path=[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
path=[path stringByAppendingPathComponent:@"test.rar"];
  //设置下载路径
    request.downloadDestinationPath=path;
    //支持断点续传
    request.allowResumeForFileDownloads=YES;
    //设置下载代理,将代理设置为progress对象即可
    request.downloadProgressDelegate=circle;
    [request startAsynchronous];
}

  7、文件的上传和下载类似,但是需要注意的事情是,上传需要往服务器发送东西,既然需要向服务器传递东西就涉及到POST,用get的方式是直接获取的,没法传值因此,上传需要用到类ASIFormDataRequest,操作和上面讲到的Post提交类似,不过这里注意的是,既然需要传递东西,就要调用传递东西的方法即可。在这里我们有三个方法

1 直接设置文件,其他默认

[request setFile:path forKey:@"file"];

2 设置文件,同时设置目的文件名称和类型

[request setFile:path withFileName:@"asiImg1.png" andContentType:@"image/png" forKey:@"file"];

3 设置二进制文件,同时设置目的文件名称和类型

[request setData:data withFileName:@"t.png" andContentType:@"image/png" forKey:@"file"];

  想要了解更多内容的小伙伴,可以点击查看源码,亲自运行测试。

  疑问咨询或技术交流,请加入官方QQ群: (452379712)

作者:杰瑞教育
出处:http://www.cnblogs.com/jerehedu/ 
本文版权归烟台杰瑞教育科技有限公司和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

时间: 2024-10-26 04:01:13

ASI简单实现网络编程的相关文章

linux下简单socket网络编程

在进行socket网络编程时, 我们需要了解一些必备的知识,例如什么是socket,ipv4的地址结构,套接字类型等等,不然上来直接看代码就会晕,当初学习网络编程时,看书上的例子,总有感觉书上讲的都很简要.再或者讲的原理太多把人绕晕.我这里只想让大家简单知道怎么使用socket进行网络编程并且给出的例子可以直接使用参考. 1. 什么是socket (1) socket 可以看成是用户进程与网络协议栈的编程接口.就是说应用层可以看成是用户进程,传输层网络层数据链路层看成网络协议栈,因为这三个层的传

ASIHTTPRequest 简单实现网络编程

使用iOS SDK中的HTTP网络请求API,相当的复杂,调用比较麻烦,ASIHTTPRequest 对CFNetwork API进行了封装,并且使用起来非常简单的一套API,在很多比较老旧的项目依然存在,因此大家仍然需要熟悉ASI的使用.下面我们一起学习研究一下ASI的简单使用. 一.环境搭建 1.首先下载asi包,并且引入下面文件:http://allseeing-i.com/ASIHTTPRequest/ 2.增加框架 二.使用方法 1.发送同步GET请求,直接调用startSynchro

linux简单命令---网络编程

------------------------------------------------------------------------------------------------------------------

Java学习之网络编程实例

转自:http://www.cnblogs.com/springcsc/archive/2009/12/03/1616413.html 多谢分享 网络编程 网络编程对于很多的初学者来说,都是很向往的一种编程技能,但是很多的初学者却因为很长一段时间无法进入网络编程的大门而放弃了对于该部分技术的学习. 在学习网络编程以前,很多初学者可能觉得网络编程是比较复杂的系统工程,需要了解很多和网络相关的基础知识,其实这些都不是很必需的.首先来问一个问题:你 会打手机吗?很多人可能说肯定会啊,不就是按按电话号码

linux下C语言socket网络编程简例

转自:http://blog.csdn.net/kikilizhm/article/details/7858405 这里给出在linux下的简单socket网络编程的实例,使用tcp协议进行通信,服务端进行监听,在收到客户端的连接后,发送数据给客户端:客户端在接受到数据后打印出来,然后关闭.程序里有详细的说明,其中对具体的结构体和函数的实现可以参考其他资料. 程序说明: 这里服务器的端口号和ip地址使用固定的设置,移植时可以根据具体情况更改,可以改写为参数传递更好,这里为了方便,使用固定的. 移

Java网络编程基础【转】

网络编程 网络编程对于很多的初学者来说,都是很向往的一种编程技能,但是很多的初学者却因为很长一段时间无法进入网络编程的大门而放弃了对于该部分技术的学习. 在 学习网络编程以前,很多初学者可能觉得网络编程是比较复杂的系统工程,需要了解很多和网络相关的基础知识,其实这些都不是很必需的.首先来问一个问题:你 会打手机吗?很多人可能说肯定会啊,不就是按按电话号码,拨打电话嘛,很简单的事情啊!其实初学者如果入门网络编程的话也可以做到这么简单! 网络编程就是在两个或两个以上的设备(例如计算机)之间传输数据.

JAVA的网络编程【转】

网络编程对于很多的初学者来说,都是很向往的一种编程技能,但是很多的初学者却因为很长一段时间无法进入网络编程的大门而放弃了对于该部分技术的学习. 在 学习网络编程以前,很多初学者可能觉得网络编程是比较复杂的系统工程,需要了解很多和网络相关的基础知识,其实这些都不是很必需的.首先来问一个问题:你 会打手机吗?很多人可能说肯定会啊,不就是按按电话号码,拨打电话嘛,很简单的事情啊!其实初学者如果入门网络编程的话也可以做到这么简单! 网络编程就是在两个或两个以上的设备(例如计算机)之间传输数据.程序员所作

JAVA的网络编程

网络编程 网络编程对于很多的初学者来说,都是很向往的一种编程技能,但是很多的初学者却因为很长一段时间无法进入网络编程的大门而放弃了对于该部分技术的学习. 在 学习网络编程以前,很多初学者可能觉得网络编程是比较复杂的系统工程,需要了解很多和网络相关的基础知识,其实这些都不是很必需的.首先来问一个问题:你 会打手机吗?很多人可能说肯定会啊,不就是按按电话号码,拨打电话嘛,很简单的事情啊!其实初学者如果入门网络编程的话也可以做到这么简单! 网络编程就是在两个或两个以上的设备(例如计算机)之间传输数据.

网络编程基础分享

1.网络编程网络编程 网络编程对于很多的初学者来说,都是很向往的一种编程技能,但是很多的初学者却因为很长一段时间无法进入网络编程的大门而放弃了对于该部分技术的学习. 在 学习网络编程以前,很多初学者可能觉得网络编程是比较复杂的系统工程,需要了解很多和网络相关的基础知识,其实这些都不是很必需的.首先来问一个问题:你 会打手机吗?很多人可能说肯定会啊,不就是按按电话号码,拨打电话嘛,很简单的事情啊!其实初学者如果入门网络编程的话也可以做到这么简单! 网络编程就是在两个或两个以上的设备(例如计算机)之