ASI简单实现网络编程

ASI简单实现网络编程

大家好,又见面了,我是全栈君。

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

一、环境搭建

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

ASI简单实现网络编程

2、添加框架

ASI简单实现网络编程

二、用法

  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对文件的下载封装的很好,我们用起来很的简单。以下我们通过一个进度条显示下载进度,效果图例如以下:

 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、文件的上传和下载类似,可是须要注意的事情是,上传须要往server发送东西。既然须要向server传递东西就涉及到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群:JRedu技术交流 (452379712)

 

作者:
杰瑞教育

出处:
http://blog.csdn.net/jerehedu/ 


本文版权归烟台杰瑞教育科技有限公司和CSDN共同拥有,欢迎转载。但未经作者允许必须保留此段声明。且在文章页面明显位置给出原文连接。否则保留追究法律责任的权利。
 
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/116352.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Matlab自定义颜色图

    Matlab自定义颜色图介绍Matlab自带颜色图比较单调,很多时候无法达到其它绘图工具,如:NCL、Pythonmatplotlib、GMT等绘图软件颜色图效果。下面就介绍如何将NCL等颜色图为己所用。颜色图下载NCL官网提供了上述绘图工具的颜色图合集,因此只需要将需要的颜色图下载后进行使用即可。选择颜色图WhiteBlueGreenYellowRed下载。Matlab读取下载的颜色表clc;clearall;closeallfiguremesh(peaks)colorbarcolor=n

    2022年5月6日
    39
  • vue怎么和后端对接_vue搭配什么后端

    vue怎么和后端对接_vue搭配什么后端简单分享一下jeeplus框架部署liunx服务器跨域问题 ,因为我这个是前后端服务器分离所以配置了俩份java后端配置1.跨域后端配置nginx(图-1)上配置 server { listen 80; server_name xxx.xx.xxx; #后端服务域名 #charset koi8-r; #access_log logs/host.access.log main; locatio

    2022年8月19日
    5
  • hashmap面试题简书_三年php面试题

    hashmap面试题简书_三年php面试题这篇文章仅限小编个人的理解,小编不是Java方向的,只是对Java有很高的学习兴趣如果有什么不对的地方还望大佬指点HashMap的底层是数组+链表,(很多人应该都知道了)JDK1.7的是数组+链表(1.7只是一个例子,以前的话也是这样后面就以1.7为例子了)首先是一个数组,然后数组的类型是链表元素是头插法JDK1.8的是数组+链表或者数组+红黑树首先是一个数组,然后数组的类型是链表在链表的元素大于8的时候,会变成红黑树在红黑树的元素小于6的时候会变成链表元素进行尾插HaspM.

    2022年8月10日
    3
  • postfix邮箱_用post方式发送文件

    postfix邮箱_用post方式发送文件一、首先关闭防火墙[root@localhost~]#systemctlstopfirewalld[root@localhost~]#setenforce0[root@localhost~]#getenforcePermissive二、搭建postfix[root@localhost~]#yuminstallpostfix三、配置postfix[root@local…

    2022年9月23日
    0
  • AV1 码流分析器的搭建

    AV1 码流分析器的搭建作为HEVC比较热门的继承者,AOM推进的AV1在2018年进入了大家的视野。研究AV1的新编码工具离不开一个强大的码流分析工具。AOM得益于开源社区的贡献,其码流分析工具也在同步的推出,给研究AV1新编码工具的小伙伴带来省去不少麻烦。本文主要简单介绍一下如何搭建一个本地的AV1码流分析工具以及在大家过程中遇到的问题。1.AV1码流分析工具简单介绍AV1码流分析工…

    2022年9月22日
    0
  • pytest重试_连接重连失败是什么意思

    pytest重试_连接重连失败是什么意思安装:pip3installpytest-rerunfailures重新运行所有失败用例要重新运行所有测试失败的用例,请使用–reruns命令行选项,并指定要运行测试的最大次数:$py

    2022年7月28日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号