【问题标题】:How to send POST request with httpBody form-data in Swift 5?如何在 Swift 5 中使用 httpBody 表单数据发送 POST 请求?
【发布时间】:2020-05-13 19:43:21
【问题描述】:

I want to send POST request in form like this

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

    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】:

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

    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”来启动会话。

    【讨论】:

      猜你喜欢
      • 2014-12-06
      • 2017-09-15
      • 1970-01-01
      • 2015-11-06
      • 2019-02-25
      • 1970-01-01
      • 2021-05-04
      • 2020-06-05
      相关资源
      最近更新 更多