web-dev-qa-db-fra.com

Faire une requête HTTP avec en-tête dans Swift

J'essaie de faire une requête HTTP à l'API Imgur. J'essaie de récupérer toutes les images associées à la balise "chats". L'URL, selon l'API Imgur est: https://api.imgur.com/3/gallery/t/cats

l'API Imgur indique ce qui suit concernant l'autorisation nécessaire pour effectuer des requêtes get:

Pour les ressources publiques en lecture seule et anonymes, telles que l’obtention d’une image info, consultation des commentaires des utilisateurs, etc. tout ce que vous avez à faire est d’envoyer un en-tête d'autorisation avec votre client_id dans vos demandes. Ça aussi fonctionne si vous souhaitez télécharger des images anonymement (sans l'image
être lié à un compte), ou si vous souhaitez créer un compte anonyme
album. Cela nous permet de savoir quelle application accède à l'API. 

Authorization: Client-ID YOUR_CLIENT_ID

J'ai regardé les questions suivantes et essayé les solutions suggérées, mais aucune d'entre elles n'a aidé.

JSON NSURLRequest avec informations d'identification

Demande Swift GET avec paramètres

Comment faire un Http obtenir et définir httpHeader dans Swift?

Mon code actuel est le suivant:

let string = "https://api.imgur.com/3/gallery/t/cats"
let url = NSURL(string: string)
let request = NSMutableURLRequest(URL: url!)
request.setValue("clientIDhere", forHTTPHeaderField: "Authorization")
//request.addValue("clientIDhere", forHTTPHeaderField: "Authorization")
request.HTTPMethod = "GET"
let session = NSURLSession.sharedSession()

let tache = session.dataTaskWithRequest(request) { (data, response, error) -> Void in
    if let antwort = response as? NSHTTPURLResponse {
        let code = antwort.statusCode
        print(code)
    }
}
tache.resume()

Mais je reçois continuellement un code de statut de 403, ce qui signifie qu'une autorisation est requise. Qu'est-ce que je fais mal?

10
joey

Je pense que vous devez ajouter Client-ID chaîne à votre ID client actuel comme pour la valeur de l'en-tête:

request.setValue("Client-ID <your_client_id>", forHTTPHeaderField: "Authorization")
19
user5741915

Mise à jour pour Swift 4:

func fetchPhotoRequest(YOUR_CLIENT_ID: String)  {
    let string = "https://photoslibrary.googleapis.com/v1/albums"
    let url = NSURL(string: string)
    let request = NSMutableURLRequest(url: url! as URL)
    request.setValue(YOUR_CLIENT_ID, forHTTPHeaderField: "Authorization") //**
    request.httpMethod = "GET"
    request.addValue("application/json", forHTTPHeaderField: "Content-Type")
    let session = URLSession.shared

    let mData = session.dataTask(with: request as URLRequest) { (data, response, error) -> Void in
        if let res = response as? HTTPURLResponse {
            print("res: \(String(describing: res))")
            print("Response: \(String(describing: response))")
        }else{
            print("Error: \(String(describing: error))")
        }
    }
    mData.resume()
}
1
Kiran jadhav