2016-07-27 4 views
3

я преобразование следующего завитка команды: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 я получаю пустое тело: {}

+0

если вы выполняете 'print (" stringPost is \ (stringPost) ")' перед созданием вашего NSMutableURLRequest, имеет ли значение stringPost значения, которые вы ожидаете? –

+0

Да. Строка, подлежащая публикации, такая же, как в команде curl –

+0

Что еще появляется в структуре 'req' на узловой стороне node.js при получении' PUT'? Что-нибудь действительное и ожидаемое? –

ответ

0

Мне нужно было установить значение для поля заголовка «Тип содержимого».

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

Это исправлено.

Смежные вопросы