下面的代碼:斯威夫特POST請求發送一個空體
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()
}
這發出{「名」:「開始」} JSON字典瓶。 Flask應該將語言名稱追加到數組中,並在響應中返回完整的數組。現在,當我手動發送請求時,這會起作用,所以它不是Flask的錯誤。但是當我從iOS發送上述內容時,我在flask控制檯中獲取了request.json == None。顯然,我發送一個空的身體,但我不應該。任何想法我錯了?
我所說的功能
@IBAction func pressedMakePOSTCall(_ sender: UIButton) {
makePOSTCall(endpoint: "http://127.0.0.1:5000/lang", languageName: "Go")
}
我嘗試添加一個尾隨斜線,只需在控制檯中得到404。我發現的唯一類似於我的問題是:How to make HTTP Post request with JSON body in Swift和我的代碼基本相同。
你檢查過,JSONSerialization是否成功,是'requestBody'而不是'nil'?你也不應該把'requestBody'定義爲'[String:Any]',因爲它的唯一值顯然是'String'類型,所以'requestBody'應該是'[String:String]',但是不需要無論如何,類型註釋。 –
'這個工作,當我手動發送請求'你是什麼意思?另外,你可以檢查'requestBody'的值嗎? – Larme
此行爲可能有不同的問題。我認爲你也應該驗證你的傳輸數據是否有正確的編碼。你應該嘗試設置你的內容類型。因爲如果期望的內容類型是例如'x-www-form-urlencoded'並且你正在發送'application/json',服務器就不會像你期望的那樣接收或處理數據。 – weissja19