我正在转换以下curl命令:
curl -X PUT -H "Authorization: Bearer 34kjsfhjbdjkh.jdhfds334jdshfksfs.kkjkjdsakjsd" -d "current_pwd=oldpassword&new_pwd1=newpassword&new_pwd2=newpassword" localhost:3000/updateDetails
进入NSURLRequest
:
func updatePassword(passwordInfo : NSDictionary){
let urlString = generateURLString("/updateDetails")
if let url = NSURL(string: urlString) {
let currPwd = passwordInfo["currPwd"] as! String
let nPwd1 = passwordInfo["newPwd1"] as! String
let nPwd2 = passwordInfo["newPwd2"] as! String
var stringPost = "current_pwd=" + currPwd
stringPost += "&new_pwd1=" + nPwd1
stringPost += "&new_pwd2=" + nPwd2
let data = stringPost.dataUsingEncoding(NSUTF8StringEncoding)
let request = NSMutableURLRequest(URL: url)
request.HTTPMethod = "PUT"
request.addValue("Bearer " + getSessionToken(), forHTTPHeaderField: "Authorization")
request.HTTPBody=data
let session = NSURLSession.sharedSession()
let task = session.dataTaskWithRequest(request){
(data: NSData?, response: NSURLResponse?, error: NSError?) -> Void in
if let httpResponse = response as? NSHTTPURLResponse {
if httpResponse.statusCode == 200 {
if let responseData = data {
let json = JSON(data: responseData)
}
}
}
}
task.resume()
}
}
curl命令工作正常。 我使用node.js表达框架来运行服务器。
var currentPwd = req.body.current_pwd;
var newPwd1 = req.body.new_pwd1;
var newPwd2 = req.body.new_pwd2;
通过curl命令发送时,服务器上会收到密码值。当通过iOS发送请求时,newPwd1值或三者中的任何一个都是未定义的。知道为什么吗?我错过了什么吗?
更新: 用于正文解析的Express 4配置如下:
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
更新2 : 这似乎很奇怪。当我尝试使用curl命令打印请求正文的日志时:请求正文似乎有效
{ current_pwd: 'oldPwd',
new_pwd1: 'newPwd',
new_pwd2: 'newPwd' }
当使用iOS NSURLRequest为请求正文打印日志时,我得到一个空主体: {}
答案 0 :(得分:0)
我必须设置标题字段'Content-type'的值。
request.addValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-type")
修正了它。