2017-04-19 2 views
0

J'essaie de publier des données de formulaire en utilisant webservice, nom d'utilisateur & mot de passe, mais en réponse, il montre une erreur indiquant "Impossible de se connecter au serveur.".Comment envoyer des données de formulaire dans la requête POST dans Swift 3

S'il vous plaît aidez-moi à envoyer des données de formulaire dans la demande POST.

 let dict:[String:String] = ["userName": userName as! String, "password": password as! String] 

     do { 

      let jsonData = try JSONSerialization.data(withJSONObject: dict, options: .prettyPrinted) 

      let url = URL(string: "(some url)")! 

      var request = URLRequest(url: url) 

      request.httpMethod = "POST" 

      request.setValue("application/x-www-form-urlencoded charset=utf-8", forHTTPHeaderField: "Content-Type") 

      request.httpBody = jsonData 

      let task = URLSession.shared.dataTask(with: request) { data, response, error in 

       if error != nil { 

        print(error!.localizedDescription) 

        return 

       } 

       do { 

        let json = try JSONSerialization.jsonObject(with: data!, options: .mutableContainers) as? NSDictionary 

        if let parseJSON = json { 

         let resultValue:String = parseJSON["success"] as! String; 

         print("result: \(resultValue)") 

         print(parseJSON) 

        } 

       } catch let error as NSError { 

        print(error) 

       } 
      } 

      task.resume() 

     } catch { 

      print(error.localizedDescription) 

     } 

J'ai essayé d'ajouter des valeurs dans la requête, des valeurs peuvent être manquantes dans la requête formée. S'il vous plaît aider!

Thats the POSTMAN response

+0

Consultez également le pod AlamoFire pour ce faire une n façon plus facile. – TheValyreanGroup

+0

@TheValyreanGroup Avoir utilisé Alamofire, le même problème s'est produit là aussi. L'API fonctionne correctement dans POSTMAN –

+0

@TheValyreanGroup: mon code: let urlString = "https://xxx.xxxx.xxxx.xxx/login" let headers = [ "Content-Type": "application/formulaire-data " ] Alamofire.request (urlString, méthode: .post, paramètres: [" utilisateur ": Nom d'utilisateur," mot de passe ": mot de passe], l'encodage: JSONEncoding.default, les en-têtes des en-têtes): .responseJSON { réponse en réponse au commutateur .result { cas .success: impression (réponse) pause cas .failure (LET erreur): impression (erreur) }} –

Répondre

3

mon appel api classe

class ApiService 
{ 
    static func getPostString(params:[String:Any]) -> String 
    { 
     var data = [String]() 
     for(key, value) in params 
     { 
      data.append(key + "=\(value)") 
     } 
     return data.map { String($0) }.joined(separator: "&") 
    } 

    static func callPost(url:URL, params:[String:Any], finish: @escaping ((message:String, data:Data?)) -> Void) 
    { 
     var request = URLRequest(url: url) 
     request.httpMethod = "POST" 

     let postString = self.getPostString(params: params) 
     request.httpBody = postString.data(using: .utf8) 

     var result:(message:String, data:Data?) = (message: "Fail", data: nil) 
     let task = URLSession.shared.dataTask(with: request) { data, response, error in 

      if(error != nil) 
      { 
       result.message = "Fail Error not null : \(error.debugDescription)" 
      } 
      else 
      { 
       result.message = "Success" 
       result.data = data 
      } 

      finish(result) 
     } 
     task.resume() 
    } 
} 

et quand l'utilisent

ApiService.callPost(url: url, params: params, finish: finishPost) 

et la fonction d'arrivée

func finishPost (message:String, data:Data?) -> Void 
{ 
    do 
    { 
     if let jsonData = data 
     { 
      let parsedData = try JSONDecoder().decode(Response.self, from: jsonData) 
      print(parsedData) 
     } 
    } 
    catch 
    { 
     print("Parse Error: \(error)") 
    } 
} 
+0

Merci @Sofia Lu –