我有一个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()
有人可以帮我弄这个吗?
最佳答案
405方法不允许响应状态代码指示该请求
服务器已知该方法,但目标不支持该方法
资源。
服务器必须在405响应中生成Allow标头字段
包含目标资源当前支持的列表
方法。
检查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)
一起使用。请参见下面的代码:
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...
您的
url
设置代码将被忽略。 GET方法是默认方法,不允许在您的服务器。