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 成功和失败的不同内容类型

使用 AFNetworking(AFHTTPClient 子类)将 JSON 发送到服务器 => 这是一个异步操作

AFHTTPclient 的编译器警告

带有 XMLParser 的 AFNetworking HTTPClient 子类

如何为不同的请求方法创建具有不同参数编码的 AFHttpClient?