所以我试图从我的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)
问题是,如何(可靠地)将params转换为POST字符串? (我的服务器期待普通的旧POST参数......没什么好看的 - 没有JSON等等)
我需要这个非常可靠(即不是黑客),所以我更喜欢我可以使用的基类(由Apple编写)。
有没有人有任何想法?
答案 0 :(得分:2)
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)
基本上将每个项目转义并转换为&#34; key = value&#34;然后将它们全部串在一起,用&#34;&amp;&#34;
分隔您也可能(可能)需要按照bbarnhart的建议设置Content-Type标头:
request.addValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")
答案 1 :(得分:1)
要配置帖子,您需要做三件事。
将Content-Type设置为application / x-www-form-urlencoded
request.addValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")
将主体设置为由&符号分隔的键/值,并转换为NSData:
let myPostBody = "uname=Eamorr&pword=mySecret"
request.HTTPBoddy = (myPostBody as NSString).dataUsingEncoding(NSUTF8StringEncoding)
设置内容长度:
request.addValue(String(myPostBody.length), forHTTPHeaderField: "Content-Length")