AFNetworking学习的那些事(一)

首先把我封装的session请求献上

1.BaseRequest.h

//网络请求的基类
// POST 、 GET 、 DELETE、PUT、HEADER、TRACE、 OPTION

@interface BaseRequest : NSObject
//POST请求方法

+(void)postWithURL:(NSString *)url para:(NSDictionary *)para callBack: (void (^)(NSData* data, NSError* error))callBack;

// 提示名: (参数类型)参数名
+(void)getWithURL: (NSString *)url para:(NSDictionary *)para callBack: (void (^)(NSData* data, NSError* error))callBack;

//DELETE 类似于GET     PUT类似于POST

@end

BaseRequest.m

+(void)postWithURL:(NSString *)url para:(NSDictionary *)para callBack:(void (^)(NSData *, NSError *))callBack {
    //拼接url的IP地址,资源路径、资源参数
    NSMutableString *urlStr = [[NSMutableString alloc]initWithString:url];

    [urlStr appendString: [self paraToString:para]];

    NSURL *URL = [NSURL URLWithString:urlStr];
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:URL];
    request.HTTPMethod = @"POST";

    //当请求的资源参数数据过大,不能放在资源参数部分时,或者为了不暴露接口的API将相关的请求参数放到请求体中。
    request.HTTPBody = [NSJSONSerialization dataWithJSONObject:para options:NSJSONWritingPrettyPrinted error:nil];          //返回值为NSData
    NSURLSession *session = [NSURLSession sharedSession];
    NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
        //请求响应的回调 block
        if (!error) {
            callBack(data,error);
//            NSLog(@"%@",[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding]);
        }
    }];

    [task resume];
}


+(void)getWithURL:(NSString *)url para:(NSDictionary *)para callBack:(void (^)(NSData *, NSError *))callBack {
    //拼接url的IP地址,资源路径、资源参数
    NSMutableString *urlStr = [[NSMutableString alloc]initWithString:url];

    [urlStr appendString: [self paraToString:para]];

    NSURL *URL = [NSURL URLWithString:urlStr];
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:URL];
    request.HTTPMethod = @"GET";

    //当请求的资源参数数据过大,不能放在资源参数部分时,或者为了不暴露接口的API将相关的请求参数放到请求体中。
    request.HTTPBody = [NSJSONSerialization dataWithJSONObject:para options:NSJSONWritingPrettyPrinted error:nil];          //返回值为NSData
    NSURLSession *session = [NSURLSession sharedSession];
    NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
        //请求响应的回调 block
        if (!error) {
            callBack(data,error);
//            NSLog(@"%@",[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding]);
        }
    }];

    [task resume];
}


//将para字典拼接为资源参数部分
+(NSString *)paraToString: (NSDictionary *)para {
    NSMutableString *str = [NSMutableString stringWithString:@"?"];

    for (NSString *key in para.allKeys) {
        [str appendFormat:@"%@=%@&",key,para[key]];
    }
    if ([str hasSuffix:@"&"]){
        //删除多余的& 连接符
        [str deleteCharactersInRange:NSMakeRange(str.length - 1, 1)];
    }

    //如果资源中含有中文或其他等特殊字符时进行Unicode编码
    NSString *paraStr = [str stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLFragmentAllowedCharacterSet]];
    return paraStr;
}

@end

这里写图片描述

str的打印结果 是这样,并经过json转化

{
“result”: {
“areaid”: “410611”,
“email”: “nytyg@qq.com”,
“id”: 35,
“loginflag”: “1”,
“mobile”: “”,
“name”: “互动体验中心”,
“phone”: “”,
“photo”: “http://biot.365960.cn/image/user/35/1483577527069.png“,
“remarks”: “”,
“roleid”: “9”,
“usertype”: “2”
},
“code”: 0,
“message”: “登录成功”,
“error”: false
}

打印的经过NSJSONSerialization 解析的 为 NSDictionary对象类型

{
code = 0;
error = 0;
message = “\U767b\U5f55\U6210\U529f”;
result = {
areaid = 410611;
email = “nytyg@qq.com”;
id = 35;
loginflag = 1;
mobile = “”;
name = “\U4e92\U52a8\U4f53\U9a8c\U4e2d\U5fc3”;
phone = “”;
photo = “http://biot.365960.cn/image/user/35/1483577527069.png“;
remarks = “”;
roleid = 9;
usertype = 2;
};
}

不同之处在于 后者的非数字型键值没有双引号,不能进行json转化

通过AFN来获取数据

这里写图片描述

在这里我们打印的 AFN返回的数据responseObject,打印结果

{
code = 0;
error = 0;
message = “\U767b\U5f55\U6210\U529f”;
result = {
areaid = 410611;
email = “nytyg@qq.com”;
id = 35;
loginflag = 1;
mobile = “”;
name = “\U4e92\U52a8\U4f53\U9a8c\U4e2d\U5fc3”;
phone = “”;
photo = “http://biot.365960.cn/image/user/35/1483577527069.png“;
remarks = “”;
roleid = 9;
usertype = 2;
};
}

那么这边同上边打印NSDictionary的结果,所以

1.AFN网络请求方法中返回的responseObject 为 已经转化成为NSDictionaryNSArray的对象, 省了 一步将请求下来的data转化为NSDictionaryNSArray
Python网络爬虫与推荐算法新闻推荐平台:网络爬虫:通过Python实现新浪新闻的爬取,可爬取新闻页面上的标题、文本、图片、视频链接(保留排版) 推荐算法:权重衰减+标签推荐+区域推荐+热点推荐.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值