HTTP Request in Swift with POST method in swift3

2019-02-18 04:33发布

问题:

I'm trying to run a HTTP Request in Swift3, to POST 2 parameters to a URL.

Example:

Link:

http://test.tranzporthub.com/street45/customer_login.php

Params:

{
    "user_id":"chaitanya3191@gmail.com",
    "password":"123"
}

What is the simplest way to do that?

I don't even want to read the response. I just want to send that to perform changes on my database through a PHP file.

回答1:

I guess, you are totally newbie but here is something that you can try in SWIFT 3:

  1. Open info.plist file (Double Click OR Right Click > Open As > Source Code)
  2. Paste this code before closing </dict> and </plist> tags:

    <key>NSAppTransportSecurity</key>
    <dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>tranzporthub.com</key>
        <dict>
            <!--Include to allow subdomains-->
            <key>NSIncludesSubdomains</key>
            <true/>
            <!--Include to allow HTTP requests-->
            <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
            <true/>
            <!--Include to specify minimum TLS version-->
            <key>NSTemporaryExceptionMinimumTLSVersion</key>
            <string>TLSv1.1</string>
        </dict>
    </dict>
    

  3. Now Open your view Controller and paste this code where you want to make post request:

    var request = URLRequest(url: URL(string: "http://test.tranzporthub.com/street45/customer_login.php")!)
    request.httpMethod = "POST"
    let postString = "user_id=chaitanya3191@gmail.com&password=123"
    request.httpBody = postString.data(using: .utf8)
    let task = URLSession.shared.dataTask(with: request) { data, response, error in
        guard let data = data, error == nil else {                                                 // check for fundamental networking error
            print("error=\(error)")
            return
        }
    
        if let httpStatus = response as? HTTPURLResponse, httpStatus.statusCode != 200 {           // check for http errors
            print("statusCode should be 200, but is \(httpStatus.statusCode)")
            print("response = \(response)")
    
        }
    
        let responseString = String(data: data, encoding: .utf8)
        print("responseString = \(responseString)")
    }
    task.resume()
    

NOTE: You can remove print statements if you don't need!

Hope this helps! :)



回答2:

 @IBAction func postAction(_ sender: Any) {
    let Url = String(format: "your url")
    guard let serviceUrl = URL(string: Url) else { return }
    //        let loginParams = String(format: LOGIN_PARAMETERS1, "test", "Hi World")
    let parameterDictionary = ["username" : "@kilo_laco", "tweet" : "Hi World"]
    var request = URLRequest(url: serviceUrl)
    request.httpMethod = "POST"
    request.setValue("Application/json", forHTTPHeaderField: "Content-Type")
    guard let httpBody = try? JSONSerialization.data(withJSONObject: parameterDictionary, options: []) else {
        return
    }
    request.httpBody = httpBody

    let session = URLSession.shared
    session.dataTask(with: request) { (data, response, error) in
        if let response = response {
            print(response)
        }
        if let data = data {
            do {
                let json = try JSONSerialization.jsonObject(with: data, options: [])
                print(json)
            }catch {
                print(error)
            }
        }
        }.resume()


}