GET 使用 NSURLSession 成功,但使用 AFHTTPSessionManager 失败
Posted
技术标签:
【中文标题】GET 使用 NSURLSession 成功,但使用 AFHTTPSessionManager 失败【英文标题】:GET succeeds with NSURLSession but fails with AFHTTPSessionManager 【发布时间】:2016-08-18 02:41:38 【问题描述】:我无法使用预签名的 url 和 AFNetworking 3.0
从 S3 获取图像。我可以使用NSMutableURLRequest
和NSURLSession
获取图像,但是当我使用AFHTTPSessionManager
和相同的NSMutableURLRequest
时出现403 错误。 (我实际上想通过调用 setImageWithURLRequest 来加载图像,这也给了我一个 403 错误,但我编写了这段代码,它使用AFHTTPSessionManager
来尝试调试问题。)AFNetworking
可能做错了什么?
let request = NSMutableURLRequest()
request.HTTPMethod = "GET"
request.URL = coverPhotoUrl // A presigned url to an image on S3
// The operation succeeds if I uncomment the NSURLSession line
// and comment out the AFHTTPSessionManager line.
//NSURLSession.sharedSession().dataTaskWithRequest(request)
AFHTTPSessionManager().dataTaskWithRequest(request)
date, response, error in
if let error = error
Log.error?.message("request failed: \(error.localizedDescription)")
else
Log.debug?.message("request succeeded.")
.resume()
【问题讨论】:
【参考方案1】:AFNetworking 由于内容类型问题而未能请求。在我将 S3 文件的内容类型从 binary/octet 更改为 image/jpeg 后,setImageWithURL 起作用了。
让 S3 设置内容类型也很困难。如果它对其他人有用,S3 会忽略我的 PUT 请求中的内容类型,直到我指定内容长度。尽管实际文件要长得多,但在生成预签名 URL 时我只是使用了 1 的虚拟长度。
【讨论】:
以上是关于GET 使用 NSURLSession 成功,但使用 AFHTTPSessionManager 失败的主要内容,如果未能解决你的问题,请参考以下文章
iOS开发网络篇—发送GET和POST请求(使用NSURLSession)
iOS开发网络篇—发送GET和POST请求(使用NSURLSession)
iOS开发网络篇—发送GET和POST请求(使用NSURLSession)