【问题标题】:Alamofire POST Error Token - SwiftAlamofire POST 错误令牌 - Swift
【发布时间】:2018-07-10 18:46:10
【问题描述】:

我和我的公司正在开发一个 iOS 项目,我们在这个问题上陷入了困境。我们正在尝试向我们的 API 发出 POST 请求,但我们得到的只是成功代码,但响应类型为:

成功:{ detail = "未提供身份验证凭据。"; }

这是我们的代码:

@IBAction func accept(_ sender: Any) {
    var comm,cat,dist : String!
    comm = observationstwee.text!
    print(comm)
    let catd = 7
    cat = String(catd)
    print(cat)
    dist = distancetwee.text!
    print(dist)
    let parameters: Parameters = [
        "comment":comm,
        "category":cat,
        "distance":dist,
        "timestamp":time
    ]
    let headers: HTTPHeaders = ["Authorization": "Token \(token!)"]
    print(headers.debugDescription)
    Alamofire.request("https://llegoelbigotes.ubiqme.es/api/new-travel",parameters: parameters, headers: headers).responseJSON {response in switch(response.result) {

    case .success(_):
        print(response)
        print("Correct Travel")
        //changeViewController(storyboard_name: "Main", viewcontroller_name: "tabBarController", context: self)
        break

    case .failure(_):
        print("FAILURE")
        }
    }
}

感谢我们在使用 Alamofire 4.5 和 iOS 11.2 时提供的帮助

【问题讨论】:

  • 检查授权密钥的名称
  • 检查您的令牌是否有值并检查您的端点如何处理授权。尝试使用邮递员谷歌扩展通过它发送请求,看看它是否有效。如果不是,那么问题出在 API 而不是您的代码
  • 也许你需要使用不同的方案,根据你的 api 层是如何实现的,请查看这篇文章 - stackoverflow.com/questions/33265812/…。也许尝试使用 Bearer vs Token

标签: ios swift api post alamofire


【解决方案1】:

1) 您正在发送 GET 请求。我没有看到在 Alamofire 调用中指定了另一种方法,并且,AFAIK,默认是 GET。

2) 在 responseJSON 之前链式 validate() 方法,因此您的请求调用将如下所示:

Alamofire.request("https://llegoelbigotes.ubiqme.es/api/new-travel", method: .post, parameters: parameters, headers: headers).validate().responseJSON { ...

解决此问题的另一个可能方法是使用另一种编码。在你对 alamofire 的调用中设置encoding: URLEncoding(destination: .httpBody)

查看this 了解更多信息。

【讨论】:

    【解决方案2】:

    我想这会奏效。

    let url = "https://llegoelbigotes.ubiqme.es/api/new-travel"
    
    Alamofire.request(
            url,
            method: .post,
            parameters: parameters,
            encoding: JSONEncoding.default,
            headers: headers). validate().responseJSON{ response in 
            switch(response.result) {
    
            case .success(_):
                print(response.response)
                print("Correct Travel")
               //changeViewController(storyboard_name: "Main", viewcontroller_name: "tabBarController", context: self)
               break
    
            case .failure(_):
            print("FAILURE")
         }
     }
    

    如果不是,请尝试检查 HTTPHeaders

    类型的 headers 变量
    let headers: HTTPHeaders = ["Authorization": "Token \(token!)"]
    

    在这里,您将在 Token 中附加您的令牌字符串。说你的令牌是 XXXX 然后它变成 TokenXXXX。尝试像

    一样使用它
    let headers: HTTPHeaders = ["Authorization": " \(token!)"]
    

    然后检查。

    【讨论】:

    • 不工作,得到 Alamofire.AFError.responseValidationFailed(Alamofire.AFError.ResponseValidationFailureReason.unacceptableStatusCode(403)) @Yaseen
    • 403 Forbidden 错误是一个 HTTP 状态代码,表示出于某种原因绝对禁止访问您尝试访问的页面或资源。在发出 POST 调用之前尝试打印所有内容,您的令牌可能有问题。我建议,尝试通过 POSTMAN 或hurl 进行 POST 调用。
    猜你喜欢
    • 1970-01-01
    • 2017-12-12
    • 2019-12-15
    • 2018-04-10
    • 1970-01-01
    • 1970-01-01
    • 2019-09-14
    • 1970-01-01
    • 2020-04-14
    相关资源
    最近更新 更多