您的位置:首页 > 理论基础 > 计算机网络

AFNetworking网络请求-数据请求(POST/GET)

2016-07-22 09:46 453 查看
使用AFNetworking(https://github.com/AFNetworking/AFNetworking)进行post,或get的网络请求服务端数据。

1、添加AFNetworking框架

通过终端使用pod进行管理







2、添加对应framework

SystemConfiguration.framework
MobileCoreServices.framework
Security.framework


3、使用

3-1、导入头文件

#import "AFNetworking.h"
3-2、封装调用方法/// 请求样式(post,或get)
typedef NS_ENUM(NSInteger, RequestHttpType)
{
/// 请求样式-post
RequestHttpTypePOST = 1,

/// 请求样式-get
RequestHttpTypeGET = 2,
};
/**
*  网络请求(区分POST、GET)
*
*  @param url        API接口url
*  @param dict       API请求参数
*  @param type       API请求类型(POST、或GET)
*  @param complete   请求结果回调
*
*  @return NSURLSessionDataTask(便于后续操作处理,如取消请求)
*/
+ (NSURLSessionDataTask *)requestWithUrl:(NSString *)url
paramtes:(NSDictionary *)dict
type:(RequestHttpType)type
complete:(void (^)(id responseObject))complete
{
// 网络异常判断 开始修改时,判断网络情况
BOOL isBadNet = [AFNetworkReachabilityManager sharedManager].isReachable;
NSLog(@"当前网络状态:%@", (isBadNet ? @"不可用" : @"可用"));
if (isBadNet)
{
NSLog("网络断了哦,请检查网络再试");
if (complete)
{
complete(nil);
}

return nil;
}

// 状态栏显示网络加载样式
[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;

// 请求地址
NSString *serverHost = @“192.168.12.22”;
NSString *requestUrl = [NSString stringWithFormat:@"%@%@", serverHost, ((url && 0 != url.length) ? url : @"")];
// 请求参数
NSDictionary *requestParameters = dict;
// 请求类型POST/GET
NSString *requestType = (RequestHttpTypePOST == type ? @"POST" : @"GET");
NSLog(@"\n request\n url=%@\n para=%@\n type=%@", requestUrl, requestParameters, requestType);

// 可变请求
NSMutableURLRequest *request = [[AFHTTPRequestSerializer serializer] requestWithMethod:requestType URLString:requestUrl parameters:requestParameters error:nil];

NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration];
NSURLSessionDataTask *dataTask = [manager dataTaskWithRequest:request completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) {

NSLog(@"\n result\n class=%@\n responseObject=%@", [responseObject class], responseObject);

// 状态栏隐藏网络加载样式
[UIApplication sharedApplication].networkActivityIndicatorVisible = NO;

if (complete)
{
complete(responseObject);
}
}];

// 开始请求
[dataTask resume];
//    [dataTask cancel];

return dataTask;
}

3-3、使用示例

NSString *url = @"http://op.juhe.cn/onebox/weather/query”;
[AFNetwork requestWithUrl:url paramtes:nil type:RequestHttpTypeGET complete:^(id responseObject) {
NSLog(“responseObject(class = %@) = %@”, [responseObject class], responseObject);
}];
4、使用注意事项

4-1、AFNetworking集成了 reachability 网络监测功能

// 是否有网
BOOL isReachable = [AFNetworkReachabilityManager sharedManager].isReachable;
// 是否WIFI网络
BOOL isReachableViaWiFi = [AFNetworkReachabilityManager sharedManager].isReachableViaWiFi;
// 是否WWAN网络
BOOL isReachableViaWWAN = [AFNetworkReachabilityManager sharedManager].isReachableViaWWAN;
4-2、网络请求的开始,与取消

// 创建网络请求
NSString *requestUrl = [NSString stringWithFormat:@"%@%@", kServerHost, ((url && 0 != url.length) ? url : @"")];
NSDictionary *requestParameters = dict;
NSString *requestType = (RequestHttpTypePOST == type ? @"POST" : @"GET");
NSMutableURLRequest *request = [[AFHTTPRequestSerializer serializer] requestWithMethod:requestType URLString:requestUrl parameters:requestParameters error:nil];
NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration];
NSURLSessionDataTask *dataTask = [manager dataTaskWithRequest:request completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) {

}];
// 开始网络请求
[dataTask resume];
// 取消网络请求
[dataTask cancel];
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: