2016-07-25 16 views
0

Ich habe den folgenden funktionierenden Curl-Befehl, den ich in Swift mit Alamofire ausführen muss.CURL-Befehl in Alamofire mit swift

curl -k -i -d '{ "user": {"displayName":"My Test" ,"email":"[email protected]","pwd":"test","roles":["stu"]}}' -H "Content-Type: application/json;charset=UTF-8" -u web:web -X POST 'https://test.herokuapp.com/xtest/auth/register' 

ich versuchte, das folgende Verfahren mit Swift geführt durch Alamofire verwenden. Ich habe den Eindruck, dass ich -u web: web falsch mache, aber ich habe keine Möglichkeit, das zu bestätigen. Die Konsole gibt mir die folgende Fehlermeldung, die ich nicht verstehe:

print response object 
    nil 
print error 
    Optional(Error Domain=NSCocoaErrorDomain Code=3840 "Invalid value around character 0." UserInfo={NSDebugDescription=Invalid value around character 0.}) 

Kann jemand darauf hinweisen, was hier falsch ist? Danke.

Dies ist die Funktion, die den CURL Befehl in Swift

func registerNewStudent(displayName: String, email: String, password: String, completionHandler: (AnyObject?, NSError?) ->()) { 

//Basic HTTP auth 
    let user = "web" 
    let password = "web" 

    let credentialData = "\(user):\(password)".dataUsingEncoding(NSUTF8StringEncoding)! 
    let base64Credentials = credentialData.base64EncodedStringWithOptions([]) 

    let headers = ["Authorization": "Basic \(base64Credentials)"] 

//example for a nested array query 
    let parameters = [ 
     "user": [ 
      "displayName": displayName, 
      "email": email, 
      "pwd": password, 
      "roles":["stu"] 
     ] 
    ] 

    Alamofire.request(
     .POST, 
     registerURL, 
     headers: headers, 
     parameters: parameters 
     ) 
     .responseJSON { response in 
      switch response.result { 
      case .Success(let value): 
       completionHandler(value, nil) 
      case .Failure(let error): 
       completionHandler(nil, error) 
      } 
    } 
} 

Ich nenne diese Funktion in der folgenden Art und Weise übersetzt:

func okButtonTapped(sender: UIButton) { 

    let displayNameText = displayNameInput.text 
    let emailText = emailInput.text 
    let passwordText = passwordInput.text 

    restApi.registerNewStudent(displayNameText!,emailInput: emailText!, passwordInput: passwordText!) {responseObject, error in 
     // use responseObject and error here 

     print("print response object") 
     print(responseObject) 
     print("print error") 
     print(error) 
    } 

Antwort vom CURL Aufruf:

{"result":{"email":"[email protected]","display_name":"My Test","pwd":"test","fb_id":null,"roles":["stu"] 

Antwort

0

Ich könnte es von hier lösen: http://www.ceus-now.com/curl-d-to-alamofire/

Hinzufügen der folgenden Zeile nach der JSON-Antwort hat den Trick (nicht vorher).

.authenticate(user: "web", password: "web") 

so das Verfahren wie folgt aussieht:

Alamofire.request(
     .POST, 
     registerURL, 
     parameters: parameters 
     ) 
     .responseJSON { response in 
      switch response.result { 
      case .Success(let value): 
       completionHandler(value, nil) 
      case .Failure(let error): 
       completionHandler(nil, error) 
      } 
    } 
    .authenticate(user: "web", password: "web") 
} 
Verwandte Themen