我无法让URLSession在POST请求的正文中发送任何内容。
这是我的代码:
// Set up the request
var request = URLRequest(url: URL(string: baseURL + url)!)
request.httpMethod = "POST"
let jsonData = try JSONSerialization.data(withJSONObject: values,
options: .prettyPrinted)
request.httpBody = jsonData
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
request.addValue("application/json", forHTTPHeaderField: "Accept")
let config = URLSessionConfiguration.ephemeral
let session = URLSession(configuration: config, delegate: self, delegateQueue: OperationQueue.main)
let task = session.dataTask(with: request) { data, response, err in
if let err = err {
print(err)
}
else {
let jsondata = data!
do {
let sessionData =
try JSONSerialization.jsonObject(with: jsondata, options: .mutableLeaves)
as? Dictionary<String, String>
callback.taskComplete(response: sessionData, task: task)
}
catch {
print(error)
}
}
}
task.resume()
服务器接收请求,但正文为空,内容类型标头为空。我无法使用默认会话,因为我正在开发自签名证书,所以我需要我的类成为URLSession委托。
我正在使用Swift 3,XCode 8和iOS 10.任何帮助都将不胜感激。
答案 0 :(得分:0)
问题解决了。这是错误的组合。如果URL没有尾部“/”,Jetty会将302重定向发送到相同的URL并附加斜杠。 iOS客户端使用“GET”进行重定向,因此正文中没有任何内容。当我添加尾部“/”时,请求正常。
我希望这个答案可以帮助进行iOS开发的人。在我发布这个问题之前,我搜索了Google几个小时。我终于在一篇关于Apache Java HttpClient的帖子中找到了答案。它有相同的行为。
感谢您的所有回复。