AlamoFire 4.X中的URL编码



我正在尝试从公共网络服务器获取JPG文件,而无需任何类型的身份验证。编码是在 Swift 3 中使用 AlamoFire 4.4 完成

的。urlString 具有以下值: https://drscdn.500px.org/photo/36406120/m%3D900_k%3D1_a%3D1/v2?client_application_id=29771&webp=true&sig=97ac488f1336f41d9f3e4a67e6bf99b3bd1aadfb6c9631a6097ff5b4a729a94e

let url = URL(string: urlString)
let myParameters: [String : AnyObject]  = ["myImage": image, "myBlurredImage": blurredImage, "index": index as AnyObject]
let croppedSize = CGSize(width: self.scrollViewWidth!, height: self.scrollViewHeight!)
self.apicounterPerRequest += 1

Alamofire.request(url!, method: .get, parameters: myParameters, encoding: URLEncoding.default)
.validate()
.response { response in
let myImage = myParameters["myImage"] as! UIImageView
let myBlurredImage = myParameters["myBlurredImage"] as! UIImageView
let index = myParameters["index"] as! Int
if let downloadedImage = UIImage(data: response.data!) {
myImage.image = downloadedImage
self.displayed500PxPhoto[index].uiimage = downloadedImage
myBlurredImage.image = PhotoManager.imageWithSize(downloadedImage, size: croppedSize)
completion({
print("Done Downloading")
})
} else {
print("Error : (response.data)")
}
if response.error != nil {
print(response.error!)
self.showAlert("One or more photos could not be downloaded. Please try again.")
completion({
throw response.error!
})
}
}

我收到 403 错误:

Error : Optional(409 bytes)
responseValidationFailed(Alamofire.AFError.ResponseValidationFailureReason.unacceptableStatusCode(403))

我很确定上面发布的 URL 中的保留字符存在编码问题,但还无法弄清楚如何正确告诉 AlamoFire 如何编码它。任何线索都受到高度赞赏。谢谢你的帮助。

请让它变得简单

以下是一些可以帮助您的提示:

  • 默认方法是get,因此无需传递它。

  • 参数可能需要为空(因为我认为您不想传递 UIImageView(

  • 不要通过存储["myImage": image]然后再次取回来添加额外的不需要的工作。
  • 不要进行不必要的强制转换来AnyObject索引,因为Alamofire接受Parameters = [String: Any]
  • 响应是数据,因此请使用responseData函数

这是我的工作示例:

func testingImage(_ completion: @escaping ((UIImage?) -> Swift.Void)) {
let urlString = "https://drscdn.500px.org/photo/36406120/m%3D900_k%3D1_a%3D1/v2?client_application_id=29771&webp=true&sig=97ac488f1336f41d9f3e4a67e6bf99b3bd1aadfb6c9631a6097ff5b4a729a94e"
guard let url = URL(string: urlString) else { return completion(nil) }
Alamofire.request(url).validate().responseData {
guard let data = $0.data else { return completion(nil) }
guard let image = UIImage(data: data) else { return completion(nil) }
completion(image)
}
}

你可以这样称呼它

testingImage() { self.imageView.image = $0 }

$0表示返回的参数(如果不想指定名称,则使用(,如果response in

最新更新