web-dev-qa-db-fra.com

Swift: requête HTTP avec paramètres dans l'en-tête

je dois envoyer une requête HTTP. Je peux le faire, mais mon API dans Backendless nécessite une application-id et une clé secrète dans l'en-tête de requête HTTP. Pouvez-vous aider comment l'ajouter dans mon code? Merci

let urlString = "https://api.backendless.com/v1/data/Pub"
    let session = NSURLSession.sharedSession()
    let url = NSURL(string: urlString)!

    session.dataTaskWithURL(url){(data: NSData?,response: NSURLResponse?, error: NSError?) -> Void in

        if let responseData = data
        {
            do{
                let json = try NSJSONSerialization.JSONObjectWithData(responseData, options: NSJSONReadingOptions.AllowFragments)
                print(json)
            }catch{
                print("Could not serialize")
            }
        }

    }.resume()
6
Tadeáš Broniš

Swift 4.1 et Swift 3

var request = URLRequest(url: url)
request.setValue("secret-keyValue", forHTTPHeaderField: "secret-key")

URLSession.shared.dataTask(with: request) { data, response, error in }

Swift 2.2

Enveloppez votre NSURL dans NSMutableRequest comme ceci:

let request = NSMutableURLRequest(URL: url)

Et utilisez ensuite cette méthode pour ajouter un en-tête à votre objet request:

request.setValue("secret-keyValue", forHTTPHeaderField: "secret-key")

Et au lieu d'utiliser dataTaskWithURL:, utilisez la méthode dataTaskWithRequest:.

session.dataTaskWithRequest(request){
(data: NSData?,response: NSURLResponse?, error: NSError?) -> Void in }
20
Said Sikira

j'ai fait ça. 

let urlString = "https://api.backendless.com/v1/data/Pub"
        let session = NSURLSession.sharedSession()
        let url = NSURL(string: urlString)!
        let request = NSMutableURLRequest(URL: url)

        request.setValue("application-idValue", forKey: "application-id")
        request.setValue("secret-keyValue", forKey: "secret-key")

        session.dataTaskWithRequest(request){(data: NSData?,response: NSURLResponse?, error: NSError?) -> Void in

            if let responseData = data
            {
                do{
                    let json = try NSJSONSerialization.JSONObjectWithData(responseData, options: NSJSONReadingOptions.AllowFragments)
                    print(json)
                }catch{
                    print("Could not serialize")
                }
            }

        }.resume()
    }
2
Tadeáš Broniš
 //MARK: GET Method
func GETDataFromServerUsingHeaderParameters(nameOfApi : NSString, parameters : NSString, withCurrentTask: RequestType, andDelegate : AnyObject) -> Void {
    if (currentReachabilityStatus != .notReachable){
        //print("Internet Connection Available!")
        currentTask = withCurrentTask
        let respectedURL = NSString(format: "%@%@", GlobalConstants.KBase_Url,nameOfApi,parameters)
        let myRequestUrl = (respectedURL.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed))!
        let url = NSURL(string: myRequestUrl as String)!
        let request = NSMutableURLRequest(url: url as URL)
        request.setValue("application-idValue", forKey: "application-id")
        request.setValue("secret-keyValue", forKey: "secret-key")
        request.httpMethod = "GET"
            let task = URLSession.shared.dataTask(with: request as URLRequest){ data,response,error in
            guard let data = data, error == nil else {
                self.showAlertMessage(title: "App Name", message: "Server not responding, please try later")
                self.delegate?.internetConnectionFailedIssue()
                return
            }
            if let httpStatus = response as? HTTPURLResponse, httpStatus.statusCode != 200 {
                self.delegate?.internetConnectionFailedIssue()
            }else{
                do {
                    self.responseDictionary = try JSONSerialization.jsonObject(with: data, options: .allowFragments) as! NSDictionary
                    self.delegate?.responseReceived()
                } catch {
                }
            }
        }
        task.resume()
    }else{
        self.showAlertMessage(title: "App Name", message: "No Internet Connection..")
    }
}
1
Mannam Brahmam