我在 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 中的结果相同。我试图找出失败的原因,但我找不到它。
好吧,我不明白,但我找到了一个可行的解决方案。
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 中有效。