2015-01-04 2 views
2

Я хотел бы скомпоновать следующий запрос curl в быстрый (или объектив-c).Swift (или объектив-c) эквивалент запроса на завивание

curl -X POST \ -d "login_id=mylogin_id" \ 
-d "api_key=myapi_key" \ 
https://~~~~~/v2/authenticate/api 

следующее, что я написал.

func authentication(){ 
    var loginID = "mylogin_id" 
    var apiKey = "myapi_key" 
    var post:NSString = "login_id=\(loginID)&api_key=\(apiKey)" 

    NSLog("PostData: %@",post); 

    var url:NSURL = NSURL(string:"https://~~~~~/v2/authenticate/api")! 

    var postData:NSData = post.dataUsingEncoding(NSASCIIStringEncoding)! 

    var postLength:NSString = String(postData.length) 

    var request:NSMutableURLRequest = NSMutableURLRequest(URL: url) 
    request.HTTPMethod = "POST" 
    request.HTTPBody = postData 
    request.setValue(postLength, forHTTPHeaderField: "Content-Length") 
    request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type") 
    request.setValue("application/json", forHTTPHeaderField: "Accept") 


    var reponseError: NSError? 
    var response: NSURLResponse? 

    var urlData: NSData? = NSURLConnection.sendSynchronousRequest(request, returningResponse:&response, error:&reponseError) 
} 

Если логин успешно завершен, токен будет возвращен, однако я не могу его получить.

{"auth_token": "ea6d13c7bc50feb46cf978d137bc01a2"} 

Я ссылался на this link. Спасибо за вашу доброту.

////// ※ Обновление Jan4th PM2: 30

Я переписан код из «запроса вара ~~» следующим образом, а затем получить «Error», поэтому он выглядит как этот код возвращает urlData как ноль.

Если вы найдете, как решить проблему, пожалуйста, помогите мне.

var request:NSMutableURLRequest = NSMutableURLRequest(URL: url) 
    request.HTTPMethod = "POST" 
    request.HTTPBody = postData 
    //request.setValue(postLength, forHTTPHeaderField: "Content-Length") 
    request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type") 
    //request.setValue("application/json", forHTTPHeaderField: "Accept") 

    var reponseError: NSError? 
    var response: NSURLResponse? 
    var urlData: NSData? = NSURLConnection.sendSynchronousRequest(request, returningResponse:&response, error:&reponseError) 
    if (urlData != nil){ 
     var responseData:NSString = NSString(data:urlData!, encoding:NSUTF8StringEncoding)! 
     let res = response as NSHTTPURLResponse!; 

     NSLog("Response code: %ld", res.statusCode); 

     if (res.statusCode >= 200 && res.statusCode < 300){ 
      var responseData:NSString = NSString(data:urlData!, encoding:NSUTF8StringEncoding)! 

      NSLog("Response ==> %@", responseData); 
     } 
    }else{ 
     NSLog("Error"); 
    } 
+0

Вы пытались удалить заголовок 'Accept' и 'Content-Length' в запросе? – skyline75489

+0

Не пробовал еще. Я попробую сейчас. – lalala

+0

Какова содержимое переменной 'responseError'? переменная 'response'? – Mundi

ответ

1

У меня есть маркер аутентификации с помощью NSURLSession от имени NSURLConnection, однако я до сих пор не знаю, почему NSURLSession могут быть использованы и NSURLConnection не могут быть использованы. Если у вас есть идея, сообщите мне. Спасибо за вашу доброту.

func authentication2(){ 
    let request = NSMutableURLRequest(URL: NSURL(string: "https://~~~/v2/authenticate/api")!) 
    request.HTTPMethod = "POST" 

    var loginID = "mylogin_id" 
    var apiKey = "myapi_key" 
    var postString:NSString = "login_id=\(loginID)&api_key=\(apiKey)" 

    request.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding) 
    let task = NSURLSession.sharedSession().dataTaskWithRequest(request) { 
     data, response, error in 

     if error != nil { 
      println("error=\(error)") 
      return 
     } 

     println("response = \(response)") 

     let responseString = NSString(data: data, encoding: NSUTF8StringEncoding) 
     println("responseString = \(responseString)") 
    } 
    task.resume() 
} 
Смежные вопросы