【发布时间】:2015-12-06 21:29:09
【问题描述】:
带有AFNetworking的POST请求:
let urlString = "http://example.com/file.php"
let dictionary = ["key1": [1,2,3], "key2": [2,4,6]]
var error: NSError?
let data = NSJSONSerialization.dataWithJSONObject(dictionary, options: NSJSONWritingOptions.allZeros, error: &error)
let jsonString = NSString(data: data!, encoding: NSUTF8StringEncoding)
let parameters = ["data" : jsonString!]
let manager = AFHTTPSessionManager()
manager.responseSerializer = AFHTTPResponseSerializer()
manager.POST(urlString, parameters: parameters, success:
{
requestOperation, response in
let result = NSString(data: response as! NSData, encoding: NSUTF8StringEncoding)!
println(result)
},
failure:
{
requestOperation, error in
})
带有NSURLSession的POST请求:
let request = NSMutableURLRequest(URL: NSURL(string: urlString)!)
request.HTTPMethod = "POST"
let bodyData = NSJSONSerialization.dataWithJSONObject(parameters, options: NSJSONWritingOptions.allZeros, error: &error)!
request.HTTPBody = bodyData
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
request.addValue("\(bodyData.length)", forHTTPHeaderField: "Content-Length")
NSURLSession.sharedSession().dataTaskWithRequest(request, completionHandler: { (data, response, error) -> Void in
let result = NSString(data: data, encoding: NSUTF8StringEncoding)!
println(result)
}).resume()
在我拥有的服务器上:
$data = json_decode($_POST["data"], true);
if (!$data) {
echo "Error: Invalid POST data";
return;
}
//do some stuff
echo "success";
在第二种情况下,我得到“错误:无效的 POST 数据”。我做错了什么?
【问题讨论】:
-
尝试添加这个:request.addValue("application/json", forHTTPHeaderField: "Accept")
-
@DanBeaulieu 如果请求想让服务器知道它会接受 JSON 响应,您可以这样做。但这里的反应不是问题。问题在于请求。
-
@rob 感谢您的澄清。直到最近我一直在用 Alamofire 作弊,所以我自己是 NSUrl 的新手。
-
@DanBeaulieu - 使用 Alamofire 不是作弊。这很聪明。查看下面用于百分比转义的笨拙(但必要)代码,您就会开始欣赏这类框架的价值。
-
@Rob 我同意,但我认为在依靠 3rd 方库之前了解事情的基本原理会更聪明。我会原路返回,回到 Alamofire,我敢肯定。
标签: swift afnetworking-2 nsurlsession