我正在使用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
不支持身份验证吗?我做错了吗?
答案 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:…
。