【发布时间】:2020-11-07 16:37:55
【问题描述】:
我收到许多使用 Alamofire 5.3 失败的请求,其中响应对象本身为 nil,或者错误是“无法解析响应”。我可以从服务器日志中看到所有这些请求都返回有效。
这是我的设置:
API 管理器类:
let config = Alamofire.Session.default.session.configuration
self.session = Alamofire.Session(configuration: config, interceptor: AccessTokenInterceptor())
AccessTokenInterceptor:
class AccessTokenInterceptor: RequestInterceptor {
func adapt(_ urlRequest: URLRequest, for session: Alamofire.Session, completion: @escaping (AdapterResult<URLRequest>) -> Void) {
var adaptedRequest = urlRequest
adaptedRequest.setValue("application/json", forHTTPHeaderField: "Accept")
adaptedRequest.setValue("application/json", forHTTPHeaderField: "Content-Type")
if let token = SettingsManager.shared.userToken {
adaptedRequest.setValue("Bearer " + token, forHTTPHeaderField: "Authorization")
}
completion(.success(adaptedRequest))
}
}
这个拦截器从SettingsManager插入我的身份验证令牌
我还使用 URLRequestConvertible 的标准路由器,其中编码是通过 JSON 序列化(字典)或 Codable 协议(对象)完成的
case .login(let body):
request.httpBody = try JSONSerialization.data(withJSONObject: body, options: [])
case .register(let object):
request.httpBody = try JSONEncoder().encode(object)
奇怪的是,我认为我所做的与我使用 Alamofire 的许多其他时间没有什么不同,现在我发出的第一个请求失败但下一个请求成功。如果我删除拦截器,则没有任何变化。
如果我检查传出的标头或正文内容,一切看起来都很正常,但 Alamofire 的响应为零。
更新:通过使用 OS_ACTIVITY_MODE 和 iOS 13,我可以看到它在抱怨请求标头和协议。服务器在 Elastic Beanstalk 上,所以我一直试图弄乱 SSL 策略,但每次第一个请求仍然失败。
【问题讨论】: