如何在Swift 5中用httpBody表单数据发送POST请求?

问题描述 投票:0回答:1

我想在表单中发送POST请求,就像这样。

我尝试了下面的代码。但是,我没有成功。

    let url = URL(string: "https://www.blablabla.com")!

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

    let json: [String: Any] = ["test":"info"]

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

    if let JSONString = String(data: jsonData!, encoding: String.Encoding.utf8) {
        let req = "{TestRequest=" + JSONString + "}"
        // Also, I tried this: let req = "TestRequest=" + JSONString
        request.httpBody = req.data(using: String.Encoding.utf8)
    }

    URLSession.shared.dataTask(with: url) {(data, response, error) in
        do {
            // JSON Parsing

        } catch {
            // Show error message

        }
    }.resume()

我得到了这个错误。

dataCorrupted(Swift.DecodingError.Context(codingPath: [], debugDescription: "The given data was not valid JSON.", underlyingError: Optional(Error Domain=NSCocoaErrorDomain Code=3840 "No value." UserInfo={NSDebugDescription=No value.})))

当我尝试用Postman时,它运行得很顺利。

post swift5 form-data
1个回答
0
投票

对不起,我在代码上犯了一个错误。当我尝试下面的代码时,我成功了。

let url = URL(string: "https://www.blablabla.com")!

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

let req = "TestRequest={\"test\":\"info\"}"
request.httpBody = req.data(using: String.Encoding.utf8)
URLSession.shared.dataTask(with: request) {(data, response, error) in
    do {
        // JSON Parsing

    } catch {
        // Show error message

    }
}.resume()

主要问题是用 "url "而不是 "request "来启动会话。

© www.soinside.com 2019 - 2024. All rights reserved.