は、ここでは、コードです:フラスコにJSON辞書:スウィフト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()
}
これは、{「行く」「名を」}送信します。 Flaskは、配列に言語名を追加し、レスポンスで完全な配列を返すものとします。今、私は手動で要求を送信するので、これはFlaskのエラーではありません。しかし、私がiOSから上記を送ると、私はrequest.json == Noneをフラスココンソールに入れます。明らかに、私は空の体を送るが、私はそうすべきではない。どこが間違っていたのか?
私はちょうどコンソールで404を取得し、末尾にスラッシュを追加してみました。
@IBAction func pressedMakePOSTCall(_ sender: UIButton) {
makePOSTCall(endpoint: "http://127.0.0.1:5000/lang", languageName: "Go")
}
としての機能を呼び出します私が見つけた鉱山に似た唯一の質問はこれです: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