Swift 3 URLSession发送空请求

时间:2016-12-17 05:08:56

标签: ios swift xcode nsurlsession nsurlrequest

我无法让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.任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:0)

问题解决了。这是错误的组合。如果URL没有尾部“/”,Jetty会将302重定向发送到相同的URL并附加斜杠。 iOS客户端使用“GET”进行重定向,因此正文中没有任何内容。当我添加尾部“/”时,请求正常。

我希望这个答案可以帮助进行iOS开发的人。在我发布这个问题之前,我搜索了Google几个小时。我终于在一篇关于Apache Java HttpClient的帖子中找到了答案。它有相同的行为。

感谢您的所有回复。