每两个请求之一中的 Swift Alamofire “请求超时”

Posted

技术标签:

【中文标题】每两个请求之一中的 Swift Alamofire “请求超时”【英文标题】:Swift Alamofire "The request timed out" in one of every two requests 【发布时间】:2018-08-02 12:23:23 【问题描述】:

在我两次使用相同 URL 调用 loadHeader 的每一次中,我都会收到“请求超时”错误。在第一次尝试中,该功能有效,我设法获取并解析响应。第二,我有时间。第三次它起作用,第四次再次超时。是关于我的代码还是关于服务器?我尝试在重试之前等待,因为它可能是服务器的一些安全协议,但它没有改变任何东西。

这里是错误代码:

FAILURE: Error Domain=NSURLErrorDomain Code=-1001 "The request timed out." 

这是我的代码:

func loadHeader(url: String)

    let parameters = ["foo": "bar"]
    Alamofire.request(url, method: .get, parameters: parameters, encoding: JSONEncoding.default)
        .validate  request, response, data in
            // Custom evaluation closure now includes data (allows you to parse data to dig out error messages if necessary)
            return .success
        
        .responseJSON 
            response in
            let json=response.data
            self.jsonToObjectHeader(json: json!)
    



func jsonToObjectHeader(json:Data)
    do
        databases = try JSONDecoder().decode(responseHeader.self,from: json)            
        if databases.ordersHeader.count == 0 
            let alert = UIAlertView(title: "empty",message: "empty",delegate: nil,cancelButtonTitle: "OK")
            alert.show()
        

        else 
            for i in 0...databases.ordersHeader.count-1 
                myArray2.append(databases.ordersHeader[i].productName!)
            
        


        DispatchQueue.main.async 
            self.myTableView.reloadData()
            self.myTableView.tableFooterView = UIView()
        

        //print(databases.ordersHeader[0].companyAddress)
    catch let jsonErr 
        print(jsonErr)
    

【问题讨论】:

你试过用CharlesProxy之类的东西调试网络端吗?如果它返回超时错误,那么听起来可能是服务器问题。 我认为是服务器问题,而不是 Alamofire 用邮递员试试看是否可以正常工作。 我刚用 Postman 试了一下,服务器工作正常 【参考方案1】:

我已经添加了

let parameters = ["foo": "bar"]

认为我必须在函数中提供参数。刚刚更新了

Alamofire.request(url, method: .get, parameters: parameters, encoding: JSONEncoding.default)

Alamofire.request(url, method: .get, parameters: nil, encoding: JSONEncoding.default)

它解决了这个问题。发布此内容以防有人遇到类似情况。

【讨论】:

以上是关于每两个请求之一中的 Swift Alamofire “请求超时”的主要内容,如果未能解决你的问题,请参考以下文章

Swift 3.0 迁移后的 Alamofire 错误:“调用中的额外参数”(请求方法)

Swift 中的 Alamofire HTTP 发布请求

Swift 3 - 不能使用数组提出的 Alamofire 请求

Swift - 使用 alamofire 发布请求

Swift Alamofire 无法解析 POST 请求中的响应 JSON 字符串

Swift 3:Alamofire POST 请求参数问题