Swift的POST请求在Postman中工作时失败

时间:2018-10-20 20:27:49

标签: ios swift

我有一个django REST API,当通过POSTMAN或android客户端调用时,它可以完美工作。但是,当我尝试在Swift中调用它时,我得到了405。

这是我的代码,

import Foundation

let url = URL(string: "http://example.com/xx/x/xxx/sports")!
var request = URLRequest(url: url)
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpMethod = "POST"
let postString = "client_id=xx&client_secret=yy"
request.httpBody = postString.data(using: .utf8)
let task = URLSession.shared.dataTask(with: url) { (data, response, error) in
    guard let data = data else {return}
    do{
        //try validate(response)
        //parse data
        print(response)
    }catch{
        print(error)
    }

    //print(String(describing: data))
}
task.resume()

有人可以帮我吗?

2 个答案:

答案 0 :(得分:2)

  

405不允许的方法响应状态码指示该请求   服务器已知该方法,但目标不支持该方法   资源。

     

服务器必须在405响应中生成允许标头字段   包含目标资源当前支持的列表   方法。

检查httpMethod。您可能需要GET或其他HTTP方法,而不是POST

更新:

替换 let postString = "client_id=xx&client_secret=yy"let postString = "{client_id=\"xx\", client_secret=\"yy\"}"

另外,您不应该将 URLSession.shared.dataTask(with: request) url一起使用。请参见下面的代码:

URLSession.shared.dataTask(with: request) { data, response, error in
  if let response = response, let data = data {
    print(response)
    print(String(data: data, encoding: .utf8))
  } else {
    print(error)
  }
}

使用时

let task = URLSession.shared.dataTask(with: url) { (data, response, error) in...

您的request设置代码将被忽略。 GET方法是默认方法,不允许在 您的服务器。

答案 1 :(得分:0)

  

我有一个Django REST API,当通过POSTMAN调用时,它可以完美工作   或android客户端。

如果它在POSTMAN上运行,那么您可以从该代码本身获取代码。复制该代码并粘贴到Playground中。它应该工作。 与您的代码进行比较。解决问题。