使用AFHTTPSessionManager下载文件并进行身份验证

时间:2015-01-30 17:01:15

标签: ios oauth-2.0 afnetworking afnetworking-2

我正在使用OAuth2身份验证处理iOS应用。

我已通过身份验证,请求我的API没有问题,但在尝试从受保护的网址下载某些文件时我遇到了问题。

我使用downloadTaskWithRequest中的AFURLSessionManager(AFNetworking)。它总是返回错误401(未授权),就像我没有登录一样。

如果我使用GET方法,我可以毫无问题地访问此URL,但我想使用downloadTaskWithRequest因为它允许我有一个进度指示器。

这是我的代码(不能正常工作):

NSURLSessionDownloadTask *downloadTask = [apiC downloadTaskWithRequest:request progress:nil destination:^NSURL *(NSURL *targetPath, NSURLResponse *response) {
     NSURL *dstPath = [NSURL fileURLWithPath:dstFilePath];
    return dstPath;

} completionHandler:^(NSURLResponse *response, NSURL *filePath, NSError *error) {

    // HERE I HAVE A 401
}];

这是 工作的代码:

[[OEOApiClient sharedClient] GET:url parameters:nil success:^(NSURLSessionDataTask *task, id responseObject) {
    // SUCCEDD !!
} failure:^(NSURLSessionDataTask *task, NSError *error) {
}];

downloadTaskWithRequest不支持身份验证吗?我做错了吗?

2 个答案:

答案 0 :(得分:4)

好的,我是以错误的方式创建我的请求:

NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:url]];

这是好方法:

NSURLRequest *request = [mySessionManager.requestSerializer requestWithMethod:@"GET" URLString:url parameters:nil error:&serializationError];

答案 1 :(得分:0)

您创建并传递到request的{​​{1}}与downloadTaskWithRequest:…中请求序列化程序生成的GET:parameters:…不同。

查看GET:parameters:…的实现,了解AFNetworking如何使用请求序列化程序生成请求。然后使用相同的代码将经过身份验证的请求对象传递给downloadTaskWithRequest:…