AFNetWorking 获取statusCode
来源:互联网 发布:淘宝模板是什么格式的 编辑:程序博客网 时间:2024/05/18 00:57
转自:http://blog.csdn.net/jyt199011302/article/details/54572940
最近做的项目中遇到这个问题,用3.0中的Session Task来获取这个问题困扰我好久,上周五找了好多资料终于解决了,着这里把问题记下:
2.0的方法,具体不多说了
- operation.response.statusCode == 500
3.0正常获取的方法:- <span style="font-size:14px;">+ (AFHTTPSessionManager *)manager
- {
- AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
- manager.requestSerializer.timeoutInterval = kTimeOutInterval;
- manager.requestSerializer = [AFJSONRequestSerializer serializer];
-
-
- manager.responseSerializer = [AFJSONResponseSerializer serializer];
- [manager.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Accept"];
- [manager.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
- [manager.requestSerializer setValue:TOKEN forHTTPHeaderField:@"Authorization"];
-
- return manager;
- }
-
-
- + (void)httpPostRequest:(NSString *)url Parameters:(NSDictionary *)params WithSuccess:(void (^)(id result))success failure:(void (^)(NSError *error))failure statusCode:(void (^)(NSInteger statusCode))statusCode
- {
- AFHTTPSessionManager *manager = [self manager];
- [manager POST:url parameters:params success:^(NSURLSessionDataTask * _Nonnull task, id _Nonnull responseObject) {
-
- NSHTTPURLResponse * responses = (NSHTTPURLResponse *)task.response;
- statusCode(responses.statusCode);
- NSLog(@"1111111111111111:%ld", responses.statusCode );
-
- success(responseObject);
- } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
- if (failure) {
- failure(error);
- }
- }];
- }
-
</span>
用Session Task获取:
Session Task分为三种Data Task,Upload Task,Download Task。毫无疑问,Session Task是整个NSURLSession架构的核心目标。
下面写了一个简单的Demo来初步使用下三种任务对象。这里使用的是convenience methods,并没有定制session和使用协议,都是采用completionHandler作为回调动作。
第一种Data Task用于加载数据,使用全局的shared session和dataTaskWithRequest:completionHandler:方法创建。
completionHandler指定任务完成后的动作。注意一定要使用resume方法启动任务。(Upload Task和Download Task同理)
- <span style="font-size:14px;">+ (void)httpRequest:(NSString *)url
- RequestType:(NSString *)type
- Header:(NSDictionary *)headers
- Parameters:(NSDictionary *)params
- WithSuccess:(void (^)(id result))success
- failure:(void (^)(NSError *error))failure
- statusCode:(void (^)(NSInteger statusCode))statusCode{
- AFHTTPSessionManager *manager = [self manager];
-
- for (NSString *key in [headers allKeys]) {
- [manager.requestSerializer setValue:[headers valueForKey:key] forHTTPHeaderField:key];
- }
- NSMutableURLRequest *request = [manager.requestSerializer requestWithMethod:type URLString:url parameters:params error:nil];
-
- NSURLSessionDataTask *dataTask = [manager dataTaskWithRequest:request completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) {
- NSHTTPURLResponse * responses = (NSHTTPURLResponse *)response;
- statusCode(responses.statusCode);
- if (success) {
- success(responseObject);
- }
- if (failure) {
- failure(error);
- }
- }];
- [dataTask resume];</span>
- }
第二种Upload Task用于完成上传文件任务,使用方法类似:
- <span style="font-size:14px;">
- - (void)uploadFile:(id)sender {
- NSURL *URL = [NSURL URLWithString:@"http://example.com/upload"];
- NSURLRequest *request = [NSURLRequest requestWithURL:URL];
- NSData *data ;
- NSURLSession *session = [NSURLSession sharedSession];
- NSURLSessionUploadTask *uploadTask = [session uploadTaskWithRequest:request fromData:data completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
-
- }];
- [uploadTask resume];
- }</span>
第三种Download Task用于完成下载文件的任务,使用全局的shared session和downloadTaskWithRequest:completionHandler:方法创建。
注意:在下载任务完成后,下载的文件位于tmp目录下,由代码块中的location指定(不妨输出看看),我们必须要在completion handler中将文件放到持久化的目录下保存。
-
- - (void)downloadFile:(id)sender {
- NSURL *URL = [NSURL URLWithString:@"图片的地址.jpg"];
- NSURLRequest *request = [NSURLRequest requestWithURL:URL];
- NSURLSession *session = [NSURLSession sharedSession];
- NSURLSessionDownloadTask *downloadTask = [session downloadTaskWithRequest:request completionHandler:^(NSURL *location, NSURLResponse *response, NSError *error) {
- [self showResponseCode:response];
-
- NSLog(@"%@", location);
-
- NSString *documentsPath = [self getDocumentsPath];
- NSURL *documentsDirectoryURL = [NSURL fileURLWithPath:documentsPath];
- NSURL *fileURL = [documentsDirectoryURL URLByAppendingPathComponent:[[response URL] lastPathComponent]];
-
- NSFileManager *fileManager = [NSFileManager defaultManager];
- if ([fileManager fileExistsAtPath:[fileURL path] isDirectory:NULL]) {
- [fileManager removeItemAtURL:fileURL error:NULL];
- }
- [fileManager moveItemAtURL:location toURL:fileURL error:NULL];
-
- NSURLRequest *showImage_request = [NSURLRequest requestWithURL:fileURL];
- [self.webView loadRequest:showImage_request];
- [self.spinner stopAnimating];
- }];
- [downloadTask resume];
- }
-
- - (NSString *)getDocumentsPath {
- NSArray *documents = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
- NSString *documentsPath = documents[0];
- return documentsPath;
- }