T. *_*kes 3 rest json ios swift
这是代码:
func makePOSTCall(endpoint: String, languageName: String) {
guard let url = URL(string: endpoint) else {
print("Could not create URL.")
return
}
let requestLang: [String: Any] = ["name": languageName]
let requestBody = try? JSONSerialization.data(withJSONObject: requestLang)
var urlRequest = URLRequest(url: url)
urlRequest.httpBody = requestBody
urlRequest.httpMethod = "POST"
let session = URLSession.shared
let task = session.dataTask(with: urlRequest) {
data, response, error in
guard let data = data, error == nil else {
print(error?.localizedDescription ?? "No data")
return
}
let responseJSON = try? JSONSerialization.jsonObject(with: data, options: [])
if let responseJSON = responseJSON as? [String: Any] {
print(responseJSON)
}
}
task.resume()
}
Run Code Online (Sandbox Code Playgroud)
这将向Flask发送一个{“ name”:“ Go”} JSON字典。Flask应该将语言名称附加到数组并在响应中返回完整的数组。现在,当我手动发送请求时,此方法有效,因此不是Flask的错误。但是,当我从iOS发送上述内容时,在flask控制台中得到了request.json == None。显然,我要发送一个空的正文,但我不应该这样。知道我哪里出错了吗?
我称这个函数为
@IBAction func pressedMakePOSTCall(_ sender: UIButton) {
makePOSTCall(endpoint: "http://127.0.0.1:5000/lang", languageName: "Go")
}
Run Code Online (Sandbox Code Playgroud)
我尝试添加斜杠,只是在控制台中得到404。我发现的唯一类似于我的问题是:如何在Swift中使用JSON主体发出HTTP Post请求,我的代码基本上是相同的。
@ weissja19是正确的,我需要将内容类型设置为application/json。新增中
urlRequest.setValue("application/json", forHTTPHeaderField: "Content-Type")
urlRequest.setValue("application/json", forHTTPHeaderField: "Accept")
Run Code Online (Sandbox Code Playgroud)
解决了错误。现在,代码可以按我预期的那样工作了。
PS我无法捕获它,因为我使用应用程序Paw进行测试,该程序会自动设置内容类型。
| 归档时间: |
|
| 查看次数: |
1744 次 |
| 最近记录: |