美文网首页
iOS 网络请求之ASIHttpRequest 封装

iOS 网络请求之ASIHttpRequest 封装

作者: 逆枫0 | 来源:发表于2017-07-20 13:47 被阅读110次

因所在公司项目久远,网络请求一直用的是ASIHTTPRequest,一步一步写起来太麻烦,故对其封装下,废话不多说直接上代码:

ASIHTTPRequest GitHub链接

demo地址

1.引入ASI,本人使用CocoaPods三方库管理工具

platform :ios, '7.0'

target 'ASINetworking' do

pod 'ASIHTTPRequest'

......

end

2. 先创建一个工具类

ASIHttpUtil.h

/**

*  请求完成回调方法

*/

typedef void (^CompleteBlock)(id json, NSString *stringData);

typedef void (^FailedBlock)(NSError *error);

typedef void (^ProgressBlock)(float progress);

/**

*  GET请求,有参数

*

*  @param path 接口路径,不能为空

*  @param paramsDic 请求的参数的字典,参数可为nil, 例如:NSDictionary *params = @{@"key":@"value"}

*  @param completeBlock 请求完成块,返回 id JSON, NSString *stringData;

*  @param failed 请求失败块,返回 NSError *error;

*/

+ (ASIHTTPRequest *)getRequestWithPath:(NSString *)path params:(NSDictionary *)paramsDic completed:(CompleteBlock)completeBlock failed:(FailedBlock)failed;

/**

*  POST请求,有参数;

*

*  @param path 接口路径,不能为空;

*  @param paramsDic 请求的参数的字典,参数可为nil, 例如:NSDictionary *params = @{@"key":@"value"}

*  @param completeBlock 请求完成块,返回 id JSON, NSString *stringData;

*  @param failed 请求失败块,返回 NSError *error;

*

*  @return 返回ASIHTTPRequest的指针,可用于 NSOperationQueue操作

*/

+ (ASIHTTPRequest *)postRequestWithPath:(NSString *)path params:(NSDictionary *)paramsDic completed:(CompleteBlock)completeBlock failed:(FailedBlock)failed;

ASIHttpUtil.m

#pragma mark GET请求

+ (ASIHTTPRequest *)getRequestWithPath:(NSString *)path params:(NSDictionary *)paramsDic completed:(CompleteBlock)completeBlock failed:(FailedBlock)failed{

NSString *urlString = [NSString stringWithFormat:@"%@",path];

urlString = [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

NSURL *url = [NSURL URLWithString:urlString];

__weak ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];

request.requestMethod = @"GET";

for (NSString *key in sg_httpHeaders.allKeys) {

if (sg_httpHeaders[key] != nil) {

[request addRequestHeader:key value:sg_httpHeaders[key]];

}

}

[request setCompletionBlock:^{

NSError *errorForJSON = [NSError errorWithDomain:@"请求数据解析为json格式,发出错误" code:2014 userInfo:@{@"请求数据json解析错误": @"中文",@"serial the data to json error":@"English"}];

id jsonData = [NSJSONSerialization JSONObjectWithData:[request responseData] options:0 error:&errorForJSON];

completeBlock(jsonData,request.responseString);

}];

[request setFailedBlock:^{

failed([request error]);

}];

[request setNumberOfTimesToRetryOnTimeout:requestTimesTry];

[request setTimeOutSeconds:requestTimeLimited];

[request startAsynchronous];

return request;

}

#pragma mark POST请求

+ (ASIHTTPRequest *)postRequestWithPath:(NSString *)path params:(NSDictionary *)paramsDic completed:(CompleteBlock)completeBlock failed:(FailedBlock)failed{

NSString *urlString = [NSString stringWithFormat:@"%@",path];

urlString = [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

NSURL *url = [NSURL URLWithString:urlString];

__weak ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];

request.requestMethod = @"POST";

for (NSString *key in sg_httpHeaders.allKeys) {

if (sg_httpHeaders[key] != nil) {

[request addRequestHeader:key value:sg_httpHeaders[key]];

}

}

[paramsDic enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {

[request setPostValue:obj forKey:key];

}];

[request setCompletionBlock:^{

NSError *errorForJSON = [NSError errorWithDomain:@"请求数据解析为json格式,发出错误" code:2014 userInfo:@{@"请求数据json解析错误": @"中文",@"serial the data to json error":@"English"}];

id jsonData = [NSJSONSerialization JSONObjectWithData:[request responseData] options:0 error:&errorForJSON];

completeBlock(jsonData, request.responseString);

}];

[request setFailedBlock:^{

failed([request error]);

}];

[request setNumberOfTimesToRetryOnTimeout:requestTimesTry];

[request setTimeOutSeconds:requestTimeLimited];

[request startAsynchronous];

return request;

}

本文只针对于GET请求方法和POST请求方法做了介绍,Demo中还详细介绍了文件上传及下载等方法的封装,有需要的朋友可以下载查看,希望对你有所帮助。

相关文章

  • iOS 网络请求之ASIHttpRequest 封装

    因所在公司项目久远,网络请求一直用的是ASIHTTPRequest,一步一步写起来太麻烦,故对其封装下,废话不多说...

  • iOS-网络相关

    本篇涵盖AFN、ASI、封装网络请求等. 1.iOS网络请求之ASI与AFN的二次封装及意义2.LXNetwork...

  • 小尝ASIHTTPReques

    一、什么是ASIHTTPRequest 使用iOS SDK中的HTTP网络请求API,相当的复杂,调用很繁琐,AS...

  • iOS网络框架简单封装

    AFN 简单封装--iOS重构-轻量级的网络请求封装实践 YTKNetworking 网络框架封装源码解析:网络层...

  • 如何封装iOS原生网络请求

    今天我想说的是如何封装iOS原生的网络请求 , 本文是基于 NSURLConnection 网络请求的封装 , 实...

  • AFNetworking使用总结

    简介 AFNetworking是目前iOS最流行的网络请求库,其内部实现封装了NSURLSession的网络请求。...

  • 网络请求

    ios开发 合理封装请求接口 概述 如今大多的app都会与网络打交道,作为开发者 合理的对网络后台请求接口进行封装...

  • iOS封装网络请求, 封装 AFNetworking

    iOS,网络请求AFNetworking 的封装 SwpNetworking AFNetworking 是一个非常...

  • AFNetworking

    AFNetworking网络请求库 导入AFNetworking.h头文件 //ASIHttpRequest,有三...

  • AFNetWorking

    开源网络框架 (1)ASIHttpRequest 是一个使用OC封装了CFNetWorking的网络编程框架,可以...

网友评论

      本文标题:iOS 网络请求之ASIHttpRequest 封装

      本文链接:https://www.haomeiwen.com/subject/chslkxtx.html