AFNetworking AFHTTPClient 类
Posted
技术标签:
【中文标题】AFNetworking AFHTTPClient 类【英文标题】:AFNetworking AFHTTPClient Class 【发布时间】:2013-10-21 19:07:14 【问题描述】:我对 ios 编程还很陌生,尤其是在 Web 服务方面。我正在开发一个用于学术目的的应用程序,我需要与我的服务器通信,目前使用 AFNetworking2 和 Restler/php,在 GET 方法方面一切正常。但我不能上传任何东西。
已经阅读了几个小时,在 github 支持站点、*** 中,几乎所有上传图片的示例/问题(还有很多)都使用这一行:
AFHTTPClient *client = [AFHTTPClient clientWithBaseURL:[NSURL URLWithString:@"http://server"]];
我的 sharedClient 确实有一个 Client 类,AFHTTPSessionManager 的子类。但是所有的例子都使用这个 AFHTTPClient 和 initWithURL 以及其他我找不到的类,比如 AFJSONRequestOperation。
主要是说我应该创建一个单例,AFHTTPClient 的子类,但我在任何地方都找不到它。有些链接甚至将我发送到官方 github 存储库,但它不再可用。 所以我的问题是,我在哪里可以获得有关 AFHTTPClient 的更多信息,我应该使用它吗,谁能给我一个关于如何创建一个或至少了解它的功能的教程。
干杯
【问题讨论】:
您需要跟踪进度吗? 不,不是。上传成功后我只需要一些反馈。 【参考方案1】:在 AFNetworking 2.0 中,AFHTTPClient 已被 AFHTTPRequestOperationManager / AFHTTPSessionManager 取代。我建议您参考example in git by them。 Git 克隆并在 XCode 中打开。它应该可以帮助你。那有最新的例子。
如果您想使用 AFHTTPClient 即 1.x 代码。这是git link to the branch。吊舱规格将是
pod 'AFNetworking', '~> 1.3.3'
在 2.0 AFNetworking 中,您可以像这样创建单例客户端。
界面
@interface AFAppDotNetAPIClient : AFHTTPSessionManager
+ (instancetype)sharedClient;
@end
实施
#import "AFAppDotNetAPIClient.h"
static NSString * const AFAppDotNetAPIBaseURLString = @"https://alpha-api.app.net/";
@implementation AFAppDotNetAPIClient
+ (instancetype)sharedClient
static AFAppDotNetAPIClient *_sharedClient = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^
_sharedClient = [[AFAppDotNetAPIClient alloc] initWithBaseURL:[NSURL URLWithString:AFAppDotNetAPIBaseURLString]];
[_sharedClient setSecurityPolicy:[AFSecurityPolicy policyWithPinningMode:AFSSLPinningModePublicKey]];
);
return _sharedClient;
@end
【讨论】:
我确实检查了他们的示例,它非常有帮助,但它没有任何上传方法,只有 GET。这就是您可以使用您的示例访问的内容,我设法完成的那部分并且运行良好......我开始认为降级是唯一的选择。 @Bruno 检查这个example 在服务器端抓取图片仍然有一些问题,但至少我设法上传了一些东西,以及该代码的修改版本,谢谢! 它不适用于图像文件,它总是得到一个错误,说实体太大。我正在尝试找到一种解决方法,如果有人使用该代码,我会标记为已回答。 所以你得到了一个 HTTP 413。我猜这个请求比服务器可以处理的大。看看你是否可以上传一个非常小的图像。如果可以,那么您需要更改服务器代码。【参考方案2】:AFHTTPClient 是来自 AFNetworking 1.x 的类 -- https://github.com/AFNetworking/AFNetworking/tree/1.x
AFNetworking 2.0 是一个相当新的库,所以没有太多关于它的教程,现在你仍然可以使用第一个版本,直到你觉得有时间学习 2.x))
希望有帮助
【讨论】:
谢谢伙计,我正在使用一个教程......以及它与这个版本一起工作的一切;)【参考方案3】:这是解决方案,已针对最新版本的 AFNetworking 进行了修改。
//sample PNG
NSData *imageData = UIImagePNGRepresentation([UIImage imageNamed:@"700k_image.png"]);
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
[manager POST:WEBSERVICE_IMAGEM_UPLOAD parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData)
[formData appendPartWithFileData:imageData name:@"image" fileName:@"image_name" mimeType:@"image/png"];
success:^(AFHTTPRequestOperation *operation, id responseObject)
NSLog(@"Success: %@", responseObject);
failure:^(AFHTTPRequestOperation *operation, NSError *error)
NSLog(@"Error: %@", error);
];
【讨论】:
以上是关于AFNetworking AFHTTPClient 类的主要内容,如果未能解决你的问题,请参考以下文章
AFNetworking AFHTTPClient 成功和失败的不同内容类型
使用 AFNetworking(AFHTTPClient 子类)将 JSON 发送到服务器 => 这是一个异步操作