2016-07-27 18 views
3

ich die folgenden curl Befehl wandelnde:Locken-Befehl NSURLRequest Swift

curl -X PUT -H "Authorization: Bearer 34kjsfhjbdjkh.jdhfds334jdshfksfs.kkjkjdsakjsd" -d "current_pwd=oldpassword&new_pwd1=newpassword&new_pwd2=newpassword" localhost:3000/updateDetails

in ein 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() 
    } 
} 

Der Curl-Befehl funktioniert völlig in Ordnung. Ich benutze node.js Express-Framework für die Ausführung des Servers.

Der Kennwortwert wird auf dem Server empfangen, wenn er über den Befehl curl gesendet wird. Wenn die Anforderung über iOS gesendet wird, ist der newPwd1-Wert oder einer der drei Werte nicht definiert. Irgendeine Idee warum? Fehle ich etwas?

aktualisieren: Express 4 Konfiguration für Körper-Analyse ist wie folgt:

app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({ extended: false })); 

Update 2: Dies scheint seltsam zu sein. Als ich versuchte, das Protokoll für die Anforderung Körper zum Drucken eine Locke Befehl: scheint der Anfrage Körper

{ current_pwd: 'oldPwd', 
    new_pwd1: 'newPwd', 
    new_pwd2: 'newPwd' } 

Wenn das Protokoll ausgedruckt wird für die Anforderung Körper mit iOS NSURLRequest ich einen leeren Körper erhalten gültig zu sein: {}

+0

Wenn Sie 'print (" stringPost is \ (stringPost) ")' direkt vor dem Erstellen von NSMutableURLRequest ausführen, hat stringPost die erwarteten Werte? –

+0

Ja. Die zu sendende Zeichenfolge ist die gleiche wie im Befehl curl –

+0

Was erscheint sonst in der 'req'-Struktur auf der express-Seite node.js, wenn die 'PUT' empfangen wird? Alles gültig und erwartet? –

Antwort

0

ich hatte den Wert für Header-Feld 'Content-type' zu setzen.

Das hat es behoben.