由于数据损坏,从 swift datatask 向 PHP 发送发布数据失败。如何解决这个问题?

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

我在 Swift 应用程序中向服务器发送 POST 请求,但服务器收到的数据与我打算发送到服务器的数据不同。

我尝试发送的数据是:

let parameters = PostData(
  previousVisit : previousVisit,
  lang : lang,
  object : object,
  enrolledSince : since
)

在实践中可以归结为:

PostData(previousVisit: "2024-03-20T10:33:48", lang: "NL", object: "{\"Location\":[\"19\"],\"Event\":[]}", enrolledSince: "{}")

但是服务器收到:

array(1) {
  ["{"lang":"NL","object":"{\"Location\":"]=>
  array(1) {
    ["\"19\""]=>
    string(0) ""
  }
}

这真的很奇怪。看起来一部分数据被解释为键,一部分被解释为值,并且一些数据丢失了。

这是我用来发送它的代码:

let url = URL(string: "MyPHPServer.com/script.php")!
let session = URLSession.shared
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.httpBody = try! JSONEncoder().encode(parameters)
let task = session.dataTask(with: request as URLRequest, completionHandler: { data, response, error in

等等

我哪里失败了?

我希望服务器上的结果与 Swift 中的结果相同。我试图找出失败的原因,但我找不到它。

php swift post struct
1个回答
0
投票

好吧,我不明白,但我找到了一个可行的解决方案。

    let queryItems = [
                                  URLQueryItem(name: "previousVisit", value: previousVisit),
                                  URLQueryItem(name: "lang", value: lang),
                                  URLQueryItem(name: "object", value: object),
                                  URLQueryItem(name: "enrolledSince", value: since)
                              ]
                      // Create a URLComponents object using blank url
                      var urlComponents = URLComponents(string: "")
    
                      // Assign the query items to the object
                      urlComponents?.queryItems = queryItems
    
                      // Fetch the formatted string from the URLComponents object
                      let request_body = urlComponents!.query!

request.setValue(
                      "application/x-www-form-urlencoded",
                      forHTTPHeaderField: "Content-Type"
                  )
                  request.httpMethod = "POST"
                   
                  request.httpBody = Data(request_body.utf8)

这对我来说在 session.DataTask 中有效。

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