AFNetworking - 返回401的setImageWithURL

时间:2012-09-14 18:21:42

标签: afnetworking

我有一个UITableView,我试图用其他数据(例如照片评论)填充服务器中的照片。 UITableView上的表格单元格具有使用setImageWithURL:placeHolderImage:设置的UIImageView。问题是只显示占位符图像。

我已经将AFHTTPClient子类化,我正在使用我的服务器进行基本身份验证。所以,我正在做这样的事情:

[self setAuthorizationHeaderWithUsername:@"user" password:@"pass"];

当我对服务器发出GET请求时,我得到的JSON包含数据和图像的路径。在tableView:cellForRowAtIndexPath:方法中,我正在尝试使用setImageWithURL:placeHolderImage:设置UIImageView,但每个下载图像的请求都返回401 Authorization Required。

我假设每次调用图片网址都不包含我在子类AFHTTPClient中的基本身份验证信息。如果确实如此,是否有办法让setImageWithURL:placeHolderImage:使用包含基本身份验证信息的子类AFHTTPClient?或者,在每次下载图像的调用中,我是否可以采取其他方法来尊重此基本身份验证?

2 个答案:

答案 0 :(得分:1)

虽然setImageWithURL:placeHolderImage:是一种非常方便的方法,但您可能需要使用一些解决方法来使其按照您的需要运行。由于图像下载通常不需要身份验证,因此这并不太令人惊讶。您可以更改UIImageView+AFNetworking.m的代码。这样您就可以使用setAuthorizationHeaderWithUsername方法来授权自己。

或者,您可以使用setImageWithURL:placeHolderImage:使用here的基础方法,并使用AFImageRequestOperation创建自己的类似类,您可以在其中设置适当的授权标头。如果你选择这个,一定要实现类似的缓存方法,以使一切尽可能高效。

答案 1 :(得分:0)

在AFHTTPClient类的构造函数中添加以下内容:

[self registerHTTPOperationClass:[AFImageRequestOperation class]];

接下来,实现如下方法:

- (void) getImageAtPath:(NSString *)path 
{
    NSMutableURLRequest * request = [self requestWithMethod:@"GET" path:path parameters:nil] ;
    [request addValue:@"image/*" forHTTPHeaderField:@"Accept"];
    AFHTTPRequestOperation * operation =
    [self HTTPRequestOperationWithRequest:request
                              success:^(AFHTTPRequestOperation *operation, id responseObject)
    {
        [buffer setData:[operation responseData]];
        NSLog( @"Got image data with length %d" , [buffer length] ) ;        
        // todo : use image raw data to populate image view
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        NSLog( @"unable to get data at %@ from the server %@" , path, [error localizedDescription] ) ;
    }] ;
    [operation start];
}