iOS9 + Swift:如何使用 JSON 值设置 Post 请求的主体?

iOS9 + Swift: How To Set The Body of A Post Request Using a JSON Value?

我正在尝试向具有自签名证书的开发服务器发出 HTTP Post 请求。这是调用 POST 的函数:

func makeHTTPPostRequest(path: String, body: JSON, onCompletion: (JSON?, NSError?) -> Void) {

    let request = NSMutableURLRequest(URL: NSURL(string: path)!)
    request.HTTPMethod = "POST"

    // I am using SwiftyJSON
    do {
        request.HTTPBody = try body.rawData()
    } catch _ { }

    let configuration = NSURLSessionConfiguration.defaultSessionConfiguration()
    let session = NSURLSession(configuration: configuration, delegate: self, delegateQueue:NSOperationQueue.mainQueue())

    let task = session.dataTaskWithRequest(request, completionHandler: {data, response, error -> Void in
        var json: JSON?
        if let _data = data {
            json = JSON(data: _data)
        }
        onCompletion(json, error)
    })
    task.resume() 
}

当我发出 POST 请求时,服务器 returns 我 "Empty fields" 错误,即使我已经正确设置了请求的 HTTPBody:

PS:当我从 Postman.

调用时,路由工作正常

request.HTTPBody属性必须是NSDataobject。如果你想发送 JSON,数据 object 应该包含一个 Unicode 字符序列(最好是 UTF-8),这是你的序列化 JSON 表示。

此外,您还应该将 Content-Type header 相应地设置为 application/json