How to send a POST request through Swift?

前端 未结 3 1892
面向向阳花
面向向阳花 2020-12-25 08:42

I have my controller like this -

def create
   if (@user = User.find_by_email(params[:email])) && @user.valid_password?(params[:password])
      ren         


        
3条回答
  •  执笔经年
    2020-12-25 09:03

    I have made a Custom HTTP class where we can sent url, parameter and we will get Data from API. Below is the class.

    import Foundation
    
    //HTTP Methods
    enum HttpMethod : String {
       case  GET
       case  POST
       case  DELETE
       case  PUT
    }
    
    
    class HttpClientApi: NSObject{
    
    //TODO: remove app transport security arbitary constant from info.plist file once we get API's
     var request : URLRequest?
     var session : URLSession?
    
    static func instance() ->  HttpClientApi{
    
        return HttpClientApi()
    }
    
    
    
    func makeAPICall(url: String,params: Dictionary?, method: HttpMethod, success:@escaping ( Data? ,HTTPURLResponse?  , NSError? ) -> Void, failure: @escaping ( Data? ,HTTPURLResponse?  , NSError? )-> Void) {
    
         request = URLRequest(url: URL(string: url)!)
    
        logging.print("URL = \(url)")
    
        if let params = params {
    
    
            let  jsonData = try? JSONSerialization.data(withJSONObject: params, options: .prettyPrinted)
    
            request?.setValue("application/json", forHTTPHeaderField: "Content-Type")
            request?.httpBody = jsonData//?.base64EncodedData()
    
    
            //paramString.data(using: String.Encoding.utf8)
        }
        request?.httpMethod = method.rawValue
    
    
        let configuration = URLSessionConfiguration.default
    
        configuration.timeoutIntervalForRequest = 30
        configuration.timeoutIntervalForResource = 30
    
        session = URLSession(configuration: configuration)
        //session?.configuration.timeoutIntervalForResource = 5
        //session?.configuration.timeoutIntervalForRequest = 5
    
        session?.dataTask(with: request! as URLRequest) { (data, response, error) -> Void in
    
            if let data = data {
    
                if let response = response as? HTTPURLResponse, 200...299 ~= response.statusCode {
                    success(data , response , error as? NSError)
                } else {
                    failure(data , response as? HTTPURLResponse, error as? NSError)
                }
            }else {
    
                failure(data , response as? HTTPURLResponse, error as? NSError)
    
            }
            }.resume()
    
      }
    
    }
    

    Now you can refer below code to get how to make an API call.

      var paramsDictionary = [String:Any]()
    
        paramsDictionary["username"] = "BBB"
        paramsDictionary["password"]    = "refef"
    
        HttpClientApi.instance().makeAPICall(url: "Your URL", params:paramsDictionary, method: .POST, success: { (data, response, error) in
    
            // API call is Successfull
    
        }, failure: { (data, response, error) in
    
            // API call Failure
    
        })
    

提交回复
热议问题