web-dev-qa-db-ja.com

Swift

私はSwiftにかなり慣れていないので、Webサイトに投稿リクエストを送信しようとしましたが、まだ機能する結果を思い付くことができませんでした。見つけたすべての例が機能しませんでした。私もです。

Json本文をhttps://mypostrequestdestination.com/api/に送信する必要があります

Json本体には1つの値しか含まれていません

{State:1}

そしてヘッダーは含まれている必要があります

{"Authorization": bearer "token"}

{"Accept":"application/json"}

{"Content-Type":"application/json"}

誰かが私を助けてくれることを願っています。

ありがとう!

4
Mason

これは私のために働いた

let token = "here is the token"
let url = URL(string: "https://mypostrequestdestination.com/api/")!

// prepare json data
let json: [String: Any] = ["State": 1]

let jsonData = try? JSONSerialization.data(withJSONObject: json)

// create post request
var request = URLRequest(url: url)
request.httpMethod = "POST"

// insert json data to the request
request.httpBody = jsonData
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
request.addValue("application/json", forHTTPHeaderField: "Accept")
request.setValue( "Bearer \(token)", forHTTPHeaderField: "Authorization")

let task = URLSession.shared.dataTask(with: request) { 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()
6
Mason

すべてのjson要素をディクショナリに保存し、それをデータオブジェクトに変換して、リクエストの本文をに等しく設定します。次に、ヘッダーを追加するだけです。

guard let url = URL(string: "www.example.com/api") else {return}
    var request = URLRequest(url: url)

    let bodyDict:[String:Int] = ["State": 1]
    let headerDict: [String:String] = [
        "Authorization": "bearer token",
        "Accept":"application/json",
        "Content-Type":"application/json"
    ]

    guard let jsonBodyData = try? JSONSerialization.data(withJSONObject: bodyDict, options: []) else {return}

    request.httpBody = jsonBodyData
    request.setValue("bearer token", forHTTPHeaderField: "Authorization")
    request.setValue("bearer token", forHTTPHeaderField: "application/json")
    request.setValue("Content-Type", forHTTPHeaderField: "application/json")
    request.allHTTPHeaderFields = headerDict
0
NoSjo