web-dev-qa-db-fra.com

Swift - Comment envoyer POST demande avec le type de contenu "x-www-form-urlencoded"

J'ai tellement cherché et il n'y a pas d'instruction claire pour l'envoi de la demande POST avec le type de contenu "x-www-form-urlencoded" . avec Alamofire, ce serait une meilleure solution… toute aide serait appréciée.

6
Mehrdad

J'espère que vous recherchez celui-ci ou que vous nous donnez plus d'explications dans le code afin que nous l'obtenions facilement:

let headers = [
    "Content-Type": "application/x-www-form-urlencoded"
]
let parameters = [

]

Alamofire.request("urlString", method: .post, parameters: parameters, encoding:  URLEncoding.httpBody, headers: headers).responseJSON { (response:DataResponse<Any>) in

    switch(response.result) {
    case.success(let data):
        print("success",data)
    case.failure(let error):
        print("Not Success",error)
        self.view.makeToast(message: "Server Error!!")
    }

}
17
Bikesh Thakur

J'ai utilisé le code ci-dessous dans Swift 4.2

guard let url = URL(string: "http://192.168.88.129:81/authenticate") else {
        return
    }


    let user1 = username.text!
    let pass = passwordfield.text!
    print(user1)
    print(pass)
    let data : Data = "username=\(user1)&password=\(pass)&grant_type=password".data(using: .utf8)!
    var request : URLRequest = URLRequest(url: url)
    request.httpMethod = "POST"
    request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField:"Content-Type");
    request.setValue(NSLocalizedString("lang", comment: ""), forHTTPHeaderField:"Accept-Language");
    request.httpBody = data

    print("one called")

    let config = URLSessionConfiguration.default
    let session = URLSession(configuration: config)
    // vs let session = URLSession.shared
      // make the request
    let task = session.dataTask(with: request, completionHandler: {
        (data, response, error) in

         if let error = error
        {
            print(error)
        }
         else if let response = response {
            print("her in resposne")

        }else if let data = data
         {
            print("here in data")
            print(data)
        }

        DispatchQueue.main.async { // Correct

            guard let responseData = data else {
                print("Error: did not receive data")
                return
            }

            let decoder = JSONDecoder()
            print(String(data: responseData, encoding: .utf8))
            do {
              //  let todo = try decoder.decode(T.self, from: responseData)
              //  NSAssertionHandler(.success(todo))
            } catch {
                print("error trying to convert data to JSON")
                //print(error)
              //  NSAssertionHandler(.failure(error))
            }
        }
    })
    task.resume()


}
2
Mohammad Muddasir

Essayez cette méthode suivante en utilisant Alamofire

Alamofire.request("yourSide", method: .post, parameters: parameters, encoding: URLEncoding.default)

Si cela ne fonctionne pas, ce qui est peu probable, utilisez ce code suivant

Alamofire.request("yourSide", method: .post, parameters: parameters, encoding: URLEncoding.httpBody)
0
Fangming