Swift 中的 HTTPS Post 2 - 使用 NSURLSession/NSMutableURLRequest

HTTPS Post in Swift 2 - Using NSURLSession/NSMutableURLRequest

使用swift 2、语言新手。我的目标是向 API 发送一个简单的 post 请求,然后解析响应。我还没有找到明确的方法来做到这一点,我所做的任何尝试都失败了。这是我拥有的:

func restURL() {
        let xmlStr: String? = "<webservices><WebService type='test'><WSName>test</WSName><select>select * from receipts where id = '1234'</select></WebService></webservices>"
        let session = NSURLSession.sharedSession()
        let url = NSURL(string: "https://apiwebaddress.com/post" as String)!
        let request = NSMutableURLRequest(URL: url)
        let post:NSString = xmlStr!
        let postData:NSData = post.dataUsingEncoding(NSUTF8StringEncoding)!
        request.HTTPMethod = "POST"
        request.HTTPBody = postData
        request.setValue("0", forHTTPHeaderField: "Content-Length")
        request.setValue("application/xml", forHTTPHeaderField: "Content-Type")
        request.setValue("gzip,deflate", forHTTPHeaderField: "Accept-Encoding")
        request.setValue("Keep-Alive", forHTTPHeaderField: "Connection")

我相信我设置正确,我想发送这个然后在回复正文中获取 xml 但我不确定从这里去哪里。我读过的所有内容都已弃用或令人困惑。有人可以用简单的术语解释如何实现我的目标吗?提前致谢

这不是您问题的直接解决方案,但有一个名为 Alamofire (link here) 的第三方框架,在我看来,它可以让像这样的事情变得更干净、更容易。

有一些示例可以说明如何向您like/similar执行请求。

这是我根据研究如何使用 NSURLSession 执行请求而制作的片段。我添加了一些注释以使代码更具可读性:)

 func restURL() {

        {
             let xmlStr: String? = "<webservices><WebService type='test'><WSName>test</WSName><select>select * from receipts where id = '1234'</select></WebService></webservices>"
            var request = NSMutableURLRequest(URL: NSURL(string: url))
            var session = NSURLSession.sharedSession()
            request.HTTPMethod = "POST"
            let post:NSString = xmlStr!
            let postData:NSData = post.dataUsingEncoding(NSUTF8StringEncoding)!
            request.HTTPBody = postData
            request.addValue("application/xml", forHTTPHeaderField: "Content-Type")
            request.addValue("gzip,deflate", forHTTPHeaderField: "Accept-Encoding")
            request.addValue("Keep-Alive", forHTTPHeaderField: "Connection")

            var task = session.dataTaskWithRequest(request, completionHandler: {data, response, error -> Void in
                println("Response: \(response)")
                var strData = NSString(data: data, encoding: NSUTF8StringEncoding)
                println("Body: \(strData)")

                /*Parse data here */
              // Here an example how it can be done in case of json response:
                var err: NSError?
                var json = NSJSONSerialization.JSONObjectWithData(data, options: .MutableLeaves, error: &err) as? NSDictionary


            }) // var task

            task.resume()

        } // End restURL