я преобразование следующего завитка команды:Curl команды NSURLRequest Swift
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()
}
}
Завитка команды работает прекрасно. Я использую node.js express framework для запуска сервера.
var currentPwd = req.body.current_pwd;
var newPwd1 = req.body.new_pwd1;
var newPwd2 = req.body.new_pwd2;
Значение пароля принимается на сервере при отправке через команду curl. Когда запрос отправляется через iOS, значение newPwd1 или любое из трех не определено. Любая идея почему? Я что-то упускаю?
Update: Экспресс 4 конфигурации для разбора тела выглядит следующим образом:
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
Update 2: Это кажется странным. Когда я попытался напечатать журнал для тела запроса, используя локон команды: тело запроса, кажется, действуют
{ current_pwd: 'oldPwd',
new_pwd1: 'newPwd',
new_pwd2: 'newPwd' }
Когда журнал распечатываются для тела запроса с использованием IOS NSURLRequest я получаю пустое тело: {}
если вы выполняете 'print (" stringPost is \ (stringPost) ")' перед созданием вашего NSMutableURLRequest, имеет ли значение stringPost значения, которые вы ожидаете? –
Да. Строка, подлежащая публикации, такая же, как в команде curl –
Что еще появляется в структуре 'req' на узловой стороне node.js при получении' PUT'? Что-нибудь действительное и ожидаемое? –