我可以轻松发出GET请求,它返回(如预期的)JSON数据,这些数据被解码为myDataModel对象:
class func getData(completionHandler: @escaping (myDataModel?, Error?) -> Void)
{
let url = "https://example.com/api/someResource?ws_key=ABC...XYZ"
if let myUrl = URL(string: url)
{
URLSession.shared.dataTask(with: myUrl)
{
(data, response, err) in
if let data = data
{
do
{
let result = try JSONDecoder().decode(myDataModel.self, from: data)
completionHandler(result, nil)
}
catch let JSONerr
{
completionHandler(nil, JSONerr)
}
}
}.resume()
}
}
这项工作很好,所以GET没有问题。(注:以上内容已简化和修改。)
同样,当我使用如下参数时,我可以发出POST请求并返回(如预期的)JSON数据
key1=value1&key2=value2
(我读到默认帖子
Content-Type
是
application/x-www-form-urlencoded
.)
然而,在另一个应用程序中,我需要发布一段XML。在多次尝试并出现许多错误后,我使用的方法是:设置标题
内容类型
到
text/xml; charset=utf-8
;没有参数,将XML作为请求正文发送。我使用了一种精确的方法:
PostHTTP(url: "https://example.com/api/someResource?ws_key=ABC...XYZ",
parameters: nil,
headers: ["Content-Type": "text/xml; charset=utf-8", "Content-Length": "\(xml.count)"],
body: "\(xml)") { (result) in ... }
(我想象你可以确定幕后发生了什么。)
对于POST请求,要发送一段XML:
我需要设置
Content-Length
或者这是自动的?
我可以用XML发送参数吗?
标题(如
内容类型
)我需要吗?
什么结构(例如。
xml=<?xml
…)和编码(例如。
addingPercentEncoding
)我需要吗?
此外,我需要把数据,我有类似的方法。我尝试的响应有错误
无法将字符串分析为XML,XML长度:0
对于PUT请求:
标题(如
内容类型
)我需要吗?
什么结构(例如。
xml=<?xml
…)和编码(例如。
添加百分比编码
)我需要吗?
因为我已经尝试了很多方法,所以一个PUT和POST的例子将是理想的。