GET завершается с помощью NSURLSession, но не выполняется с помощью AFHTTPSessionManager.

У меня возникли проблемы с получением изображения с S3 с использованием заранее заданного URL-адреса и AFNetworking 3.0. Я могу получить изображение, используя NSMutableURLRequest и NSURLSession, но получаю ошибку 403, когда использую AFHTTPSessionManager и тот же NSMutableURLRequest. (На самом деле я хочу загрузить изображение, просто вызвав 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()

person Christopher Simmons    schedule 18.08.2016    source источник


Ответы (1)


AFNetworking не смог выполнить запрос из-за проблем с типом контента. setImageWithURL заработал после того, как я изменил тип содержимого файлов S3 с двоичного/октетного на изображение/jpeg.

Заставить S3 устанавливать тип контента также было сложно. На случай, если это пригодится кому-то еще, S3 игнорировал тип контента в моих запросах PUT, пока я не указал длину контента. Я просто использовал фиктивную длину 1 при создании предварительно подписанного URL-адреса, несмотря на то, что фактические файлы намного длиннее.

person Christopher Simmons    schedule 18.08.2016