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 获取图像。我可以使用NSMutableURLRequestNSURLSession 获取图像,但是当我使用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)

NSURLSession的GET和POST请求的封装

iOS开发网络篇—发送GET和POST请求(使用NSURLSession)

iOS开发网络学习七:NSURLSession的基本使用get和post请求