Alamofire请求失败,无响应



我在Alamofire 5.3中收到了许多失败的请求,其中响应对象本身为零,或者错误为"无法解析响应";。我可以从服务器日志中看到,所有这些请求都返回了有效的。

这是我的设置:

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序列化(字典(或可编码协议(对象(完成

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和iOS13,我可以看到它在抱怨请求标头和协议。服务器在Elastic Beanstalk上,所以我一直试图破坏SSL策略,但每次第一个请求都会失败。

这变成了一个兔子洞,所以为了社区改进,以下是我的发现。

在搜索了活动日志错误后,我注意到iOS抱怨一个无效的头类型——升级。在搜索该值时,我发现了关于删除标头的问题。我了解到Apache在Elastic Beanstalk上充当代理,但请求中存在HTTP/2标头的混淆,iOS不喜欢这样。

为了摆脱头值,我最终切换到Nginx代理。由于我的应用程序使用了Laravel,因此我需要更正漂亮的URL。为此,我找到了答案。现在,我的网络和移动应用程序似乎都相处得很好。

最新更新