如何在 swift 中使用 NSURLSession POST JSON 数据

Posted

技术标签:

【中文标题】如何在 swift 中使用 NSURLSession POST JSON 数据【英文标题】:How to POST JSON data using NSURLSession in swift 【发布时间】:2014-11-20 09:41:34 【问题描述】:

我被下面的代码卡住了。如何设置 param 和 in post 方法?

let params:[String:Any] = [
        "email" : usr,
        "userPwd" : pwdCode]

let url = NSURL(string:"http://inspect.dev.cbre.eu/SyncServices/api/jobmanagement/PlusContactAuthentication")
let request = NSMutableURLRequest(URL: url!)
request.setValue("application/json; charset=utf-8", forHTTPHeaderField: "Content-Type")

request.HTTPBody = params<what should do for Json parameter>


let task = NSURLSession.sharedSession().dataTaskWithRequest(request) 
    data, response, error in

    if let httpResponse = response as? NSHTTPURLResponse 
        if httpResponse.statusCode != 200 
            println("response was not 200: \(response)")
            return
        
    
    if error 
        println("error submitting request: \(error)")
        return
    

    // handle the data of the successful response here

task.resume()

【问题讨论】:

我认为目前还不清楚问题所在 - 你能更具体一点吗? 对不起我的语言...我想为 post 方法调整一个参数 ..但我不知道该怎么做?如果您可以编辑我的代码并将其展示给我,这会很好 答案取决于usrpwdCode 类型。字符串? How to post a JSON with new Apple Swift Language的可能重复 【参考方案1】:

如果我正确理解了问题

var configuration = NSURLSessionConfiguration.defaultSessionConfiguration()
var session = NSURLSession(configuration: configuration)
var usr = "dsdd"
var pwdCode = "dsds"
let params:[String: AnyObject] = [
    "email" : usr,
    "userPwd" : pwdCode ]

let url = NSURL(string:"http://localhost:8300")
let request = NSMutableURLRequest(URL: url!)
request.setValue("application/json; charset=utf-8", forHTTPHeaderField: "Content-Type")
request.HTTPMethod = "POST"
var err: NSError?
request.HTTPBody = NSJSONSerialization.dataWithJSONObject(params, options: NSJSONWritingOptions.allZeros, error: &err)

let task = session.dataTaskWithRequest(request) 
    data, response, error in

    if let httpResponse = response as? NSHTTPURLResponse 
        if httpResponse.statusCode != 200 
            println("response was not 200: \(response)")
            return
        
    
    if (error != nil) 
        println("error submitting request: \(error)")
        return
    

    // handle the data of the successful response here
    var result = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.allZeros, error: nil) as? NSDictionary
    println(result)

task.resume()

我建议使用AFNetworking。例如,请参阅Posting JSON data using AFNetworking 2.0。

【讨论】:

AFNetworking 通过 NSURLSession 为您提供了什么?我曾经使用过 AFNetworking,但 NSURLSession 似乎与以前非常相似。 @AdamEberbach,AFNetworking (2.x) 建立在 NSURLSession 之上,以提供一些让您的生活更轻松的抽象。例如,它可能会将数据解析为 JSON(响应中的标头通常表示数据的类型)。还有很多其他的东西;您可以从本教程raywenderlich.com/59255/afnetworking-2-0-tutorial 开始,然后访问文档以查看更多用法。但是,我同意有时你不需要带大枪,如果你不需要它们:) - 另一件值得注意的事情 - 如果你想针对 ios 6,你可能会发现 AFNetworking 是你的最佳选择 这非常有帮助,我与这个问题斗争了很长时间,感谢这个答案终于解决了。 您的链接不适用于 swift 代码其目标 c 代码。请提供 swift 代码的 afnetworking 链接【参考方案2】:

这是您可以设置参数并发送POST请求的方法,使用Alamofire的简单方法。

斯威夫特 2.2

let URL = NSURL(string: "https://SOME_URL/web.send.json")!
let mutableURLRequest = NSMutableURLRequest(URL: URL)
mutableURLRequest.HTTPMethod = "POST"

let parameters = ["api_key": "______", "email_details": ["fromname": "______", "subject": "this is test email subject", "from": "support@apple.com", "content": "<p> hi, this is a test email sent via Pepipost JSON API.</p>"], "recipients": ["_________"]]

do 
    mutableURLRequest.HTTPBody = try NSJSONSerialization.dataWithJSONObject(parameters, options: NSJSONWritingOptions())
 catch 
    // No-op


mutableURLRequest.setValue("application/json", forHTTPHeaderField: "Content-Type")

Alamofire.request(mutableURLRequest)
    .responseJSON  response in
        print(response.request)  // original URL request
        print(response.response) // URL response
        print(response.data)     // server data
        print(response.result)   // result of response serialization

        if let JSON = response.result.value 
            print("JSON: \(JSON)")
        

【讨论】:

以上是关于如何在 swift 中使用 NSURLSession POST JSON 数据的主要内容,如果未能解决你的问题,请参考以下文章

如何在OC中使用Swift如何在Swift中使用OC

如何在 swift 3.0 中编写此代码,特别是如何在 swift3 中使用宏?

如何在 kotlin native 中使用 swift 库?

如何在 Swift 中使用 Apple 地图 - 你必须使用 C 还是 Swift 可以?

如何在 Swift 中使用 MKPolylineView

如何在 Swift 中使用`syslog`