摘要:自从苹果的使用安全请求,废弃NSUrlconnection,但是我们还用http请求,可以继续使用afnetworking1.0至2.的。我想边记录下使用3.0的感想。
- 在上次iOS项目创建步骤中,编辑Podfile文件,添加
pod 'AFNetworking', '~> 3.0'
pod install
- 在文档中new file ->CallApi.h,CallApi.m
+(void)afJsonRequestDemo:(NSString *)req {
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
NSString *url = [NSString stringWithFormat:@"%@/req",SERVERIP_JSON];
//fuck 这句没写直接失败!目前是http请求建议用二进制
manager.responseSerializer = [AFHTTPResponseSerializer serializer];
[manager POST:url parameters:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
NSDictionary *obj = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableContainers error:nil];
NSLog(@"afJsonRequest3.0请求成功");
if (obj) {
FYTDResGoodsList *resGoodsList = [[FYTDResGoodsList alloc] initWithDataDic:obj];
}
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"afJsonRequest3.0请求失败");
}];
}
此处我们点击AFHTTPSessionManager,进入查看.h文档
AFHTTPSessionManager是AFURLSessionManager的子类responseSerializer :By default, this property is set to an instance of
AFJSONResponseSerializer
.(默认是AFJSONResponseSerializer)- Any request or response serializer dealing with HTTP is encouraged to subclass
AFHTTPResponseSerializer
in order to ensure consistent default behavior.(任何http请求序列化处理一般是设为AFHTTPResponseSerializer) - 这也是之前我一直请求失败的原因。当然还得记得http的请求在plist文件中还是得添加
<!-- AFNetworking http请求 -->
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
注:若是出现build failed,AFNetworking编译失败
-
可在下图为主输入:$(inherited)
重新编译下即可AFNetWOrking默认会保存cookie,每次请求的cookie是之前请求,并且缓存下来的,所以会是对应的数组
NSHTTPCookieStorage * story = [NSHTTPCookieStorage sharedHTTPCookieStorage];
NSHTTPCookie * coo;
// 所有的cookie
NSArray * arr1=story.cookies;
// 指定URL的cookie
NSArray * arr=[story cookiesForURL:[NSURL URLWithString:@"http://111.12.43.222"]];
for (NSHTTPCookie * cookestr in arr) {
NSLog(@"---coo = %@",cookestr);
coo = cookestr;
}