簡體   English   中英

Alamofire 請求失敗,響應為零

[英]Alamofire request fails with nil response

我收到了大量使用 Alamofire 5.3 的失敗請求,其中響應對象本身為零,或者錯誤是“無法解析響應”。 我可以從服務器日志中看到所有這些請求都返回有效。

這是我的設置:

API 管理器類:

let config = Alamofire.Session.default.session.configuration
self.session = Alamofire.Session(configuration: config, interceptor: 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 策略,但每次第一個請求仍然失敗。

這變成了一個相當大的兔子洞,所以為了社區改進的利益,這是我發現的。

在搜索活動日志錯誤后,我注意到 iOS 抱怨標題類型無效——升級。 搜索該值,我發現這個問題,有關刪除頭。 我了解到 Apache 在 Elastic Beanstalk 上充當代理,但請求中的 HTTP/2 標頭存在混淆,而 iOS 不喜歡這樣。

為了擺脫標頭值,我最終切換到 Nginx 代理。 由於我的應用程序使用 Laravel,因此我需要處理更正漂亮的 URL。 為此,我找到了這個答案 現在我的網絡和移動應用程序似乎都相處得很好。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM