ios - 将 NSDictionary 转换为 POST 字符串时卡住了

标签 ios swift asynchronous nsdictionary

所以我尝试从我的 iOS 设备向我的服务器发出异步 POST 请求。

这是我编写的 Swift 代码:

    var urlString = "https://eamorr.com/ajax/login.php"
    var url = NSURL(string: urlString)
    var request = NSMutableURLRequest(URL: url!)
    request.HTTPMethod = "POST"
    var params = ["uname":"Eamorr", "pword":"mySecret"] as Dictionary<String, String>
    request.HTTPBody = params.   //what to do here???
    var connection = NSURLConnection(request: request, delegate: self, startImmediately: true)

问题是,如何(可靠地)将参数转换为 POST 字符串? (我的服务器需要普通的旧 POST 参数...没什么花哨的 - 没有 JSON 等)

我需要它非常可靠(即不是黑客),所以我更希望有一些我可以使用的基类(由Apple编写)。

有人有什么想法吗?

最佳答案

bbarnhart 建议的一些内容,但要实际创建正文数据,请使用:

let body = "&".join(map(params, {
    let key = $0.0.stringByAddingPercentEscapesUsingEncoding(NSUTF8StringEncoding)
    let value = $0.1.stringByAddingPercentEscapesUsingEncoding(NSUTF8StringEncoding)
    return "\(key!)=\(value!)"
}))
request.HTTPBody = body.dataUsingEncoding(NSUTF8StringEncoding)

基本上将每个项目转义并转换为“key=value”,然后将它们全部串在一起并用“&”分隔

您还(可能)需要按照 bbarnhart 的建议设置 Content-Type header :

request.addValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")

关于ios - 将 NSDictionary 转换为 POST 字符串时卡住了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28409781/

相关文章:

node.js - 这段代码是如何同步的?

ios - TableViewController/自定义单元格 - 无法移动到下一个文本字段

ios - swift : [NSDictionary]()

c# - 运行异步 Foreach 循环 C# async await

swift - 同时移动所有矩形的点

ios - 如何使用 Swift 在后台线程中保存文件?

c# - 什么是 "naturally asynchronous"或 "pure asynchronous"?

ios - *** 由于 UITableView 中未捕获的异常 'NSRangeException' 而终止应用程序

android - 我应该将 Ionic Platforms 文件夹放入源代码管理吗?

iphone - UITextField 忽略 inputDelegate?