সুইফ্ট 3 এবং পরবর্তী সময়ে আপনি এটি করতে পারেন:
let url = URL(string: "http://www.thisismylink.com/postName.php")!
var request = URLRequest(url: url)
request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")
request.httpMethod = "POST"
let parameters: [String: Any] = [
"id": 13,
"name": "Jack & Jill"
]
request.httpBody = parameters.percentEncoded()
let task = URLSession.shared.dataTask(with: request) { data, response, error in
guard let data = data,
let response = response as? HTTPURLResponse,
error == nil else { // check for fundamental networking error
print("error", error ?? "Unknown error")
return
}
guard (200 ... 299) ~= response.statusCode else { // check for http errors
print("statusCode should be 2xx, but is \(response.statusCode)")
print("response = \(response)")
return
}
let responseString = String(data: data, encoding: .utf8)
print("responseString = \(responseString)")
}
task.resume()
কোথায়:
extension Dictionary {
func percentEncoded() -> Data? {
return map { key, value in
let escapedKey = "\(key)".addingPercentEncoding(withAllowedCharacters: .urlQueryValueAllowed) ?? ""
let escapedValue = "\(value)".addingPercentEncoding(withAllowedCharacters: .urlQueryValueAllowed) ?? ""
return escapedKey + "=" + escapedValue
}
.joined(separator: "&")
.data(using: .utf8)
}
}
extension CharacterSet {
static let urlQueryValueAllowed: CharacterSet = {
let generalDelimitersToEncode = ":#[]@" // does not include "?" or "/" due to RFC 3986 - Section 3.4
let subDelimitersToEncode = "!$&'()*+,;="
var allowed = CharacterSet.urlQueryAllowed
allowed.remove(charactersIn: "\(generalDelimitersToEncode)\(subDelimitersToEncode)")
return allowed
}()
}
এটি উভয় মৌলিক নেটওয়ার্কিং ত্রুটির পাশাপাশি উচ্চ-স্তরের HTTP ত্রুটিগুলি পরীক্ষা করে। এটিও সঠিকভাবে শতাংশ কোয়েরির প্যারামিটারগুলি এড়িয়ে যায়।
নোট, আমি একটি ব্যবহৃত name
এর Jack & Jill
সঠিক ব্যাখ্যা করার জন্য, x-www-form-urlencoded
ফল name=Jack%20%26%20Jill
, যেটি "শতাংশ এনকোড" (অর্থাত স্থান সঙ্গে প্রতিস্থাপিত হয় %20
এবং &
মান সঙ্গে প্রতিস্থাপিত হয় %26
)।
দেখুন এই উত্তরটি পূর্ববর্তী সংস্করণ সুইফট 2 প্রতিদান জন্য।