当前位置: 首页 > 知识库问答 >
问题:

使用Alamofire处理超时

朱明知
2023-03-14

是否可以为Alamofire请求添加超时处理程序?

在我的项目中,我使用Alamofire的方式如下:

init() {
    let configuration = NSURLSessionConfiguration.defaultSessionConfiguration()
    configuration.timeoutIntervalForRequest = 30

    self.alamofireManager = Alamofire.Manager(configuration: configuration)
}

func requestAuthorizationWithEmail(email:NSString, password:NSString, completion: (result: RequestResult) -> Void) {

    self.alamofireManager!.request(.POST, "myURL", parameters:["email": email, "password":password])
        .responseJSON { response in
            switch response.result {
            case .Success(let JSON):
                //do json stuff
            case .Failure(let error):
                print("\n\nAuth request failed with error:\n \(error)")
                completion(result: .ConnectionFailed)
            }
    }
}

编辑:

请求失败消息

Error Domain=NSURLErrorDomain Code=-1001“请求超时。”UserInfo={NSUnderlyingError=0x7fc10b937320{Error Domain=kCFErrorDomainCFNetwork Code=-1001“(null)”UserInfo={{kCFStreamErrorCodeKey=-2102,{kCFStreamErrorDomainKey=4}},NSErrorFailingURLStringKey=url,NSErrorFailingURLKey=url,{kCFStreamErrorDomainKey=4,{kCFStreamErrorCodeKey=-2102,NSLocalizedDescription=请求超时。}

共有3个答案

辛可人
2023-03-14

我想为项目中的每个HTTP调用设置相同的超时。

关键思想是将Alamofire会话管理器声明为全局变量。然后,要创建URLSessionConfiguration变量,请以秒为单位设置其超时,并将其分配给管理器。

项目中的每个调用都可以使用此配置的会话管理器。

在我的例子中,全局Alamofire会话管理器变量是在AppDelegate文件(全局)中设置的,其配置是在其didFinishLaunchingWithOptions方法中管理的

AppDelegate。敏捷的

import UIKit

var AFManager = SessionManager()

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

        let configuration = URLSessionConfiguration.default
        configuration.timeoutIntervalForRequest = 4 // seconds
        configuration.timeoutIntervalForResource = 4 //seconds
        AFManager = Alamofire.SessionManager(configuration: configuration)

        return true
    }
    ...
}

从现在开始,可以使用afManager从应用程序的任何部分调用Alamofire请求函数。

例如:

AFManager.request("yourURL", method: .post, parameters: parameters, encoding: JSONEncoding.default).validate().responseJSON { response in
    ...
}
巫马善
2023-03-14

斯威夫特3

被接受的答案对我不起作用。

经过大量研究,我是这样做的:

let manager = Alamofire.SessionManager.default
manager.session.configuration.timeoutIntervalForRequest = 120

manager.request("yourUrl", method: .post, parameters: ["parameterKey": "value"])
纪鸿禧
2023-03-14

您可以比较错误_code如果它等于-1001,即nsurerrortimedout,则您知道这是一个超时。

let manager = Alamofire.SessionManager.default
manager.session.configuration.timeoutIntervalForRequest = 120

manager.request("yourUrl", method: .post, parameters: ["parameterKey": "value"])
        .responseJSON {
            response in
            switch (response.result) {
            case .success: // succes path 
            case .failure(let error):
                if error._code == NSURLErrorTimedOut {
                    print("Request timeout!")
                }
            }
        }
 类似资料:
  • 问题内容: 是否可以为Alamofire请求添加超时处理程序? 在我的项目中,我以这种方式使用Alamofire: 编辑: 请求失败消息 错误域= NSURLErrorDomain代码= -1001“请求超时。” UserInfo = {NSUnderlyingError = 0x7fc10b937320 {Error Domain = kCFErrorDomainCFNetwork Code =

  • 问题内容: 免责声明:这是我第一次尝试该模块。 我使用以下方式尝试支持超时功能,以等待一组异步任务的所有结果。这是更大的库的一部分,因此我省略了一些不相关的代码。 请注意,该库已经支持通过ThreadPoolExecutors和ProcessPoolExecutors提交任务和使用超时,因此,我对使用这些代替建议或关于为什么要使用的问题并不真正感兴趣。转到代码… 起初,我不必担心在超时时取消待处理

  • 问题内容: 对不起,我的英语不好 :) 我在iOS应用程序的Swift中通过Alamofire解析JSON响应时遇到问题。我编写了一个函数来返回JSON响应字符串。请求和响应处理我做Alamofire和JSON处理我做SwiftyJSON。首先,我声明一个名为 jsonString的变量 ,其值为 test 。然后,我向REST服务发出请求,并通过单击按钮获得JSON响应。我想使用函数 ping(

  • 问题内容: 在第一种情况下 ,它会抛出 NSURLErrorDomain (正确设置了超时): 在第二种情况下 ,超时不会被替换,而是仍设置为60秒。 我在ios 10.1中运行 我的代码:( 不起作用) 解决了Alamofire github线程: Alamofire 4.3.0设置超时引发NSURLErrorDomain错误#1931 问题答案: 基于@ kamal-thakur响应。 迅捷3

  • 问题内容: 我试图用一个批量一些 KTable 值,并送他们。似乎30秒钟超出了使用者超时间隔,在此间隔之后,Kafka认为该使用者已失效并释放了分区。 我尝试提高 轮询 和 提交间隔 的频率来避免这种情况: 不幸的是,这些错误仍在发生: (很多) 其次是: 显然,我需要更频繁地将心跳发送回服务器。怎么样? 我的拓扑是: 该 KTable 是关键,每30秒分组值。在 Processor.init(

  • 前言 sender的run 调用done方法,并传入TimeoutException