2016-01-04 29 views
6

Sto tentando di effettuare una richiesta HTTP all'API Imgur. Sto cercando di recuperare tutte le immagini associate al tag "gatti". L'url, secondo l'API Imgur è: https://api.imgur.com/3/gallery/t/catsEffettuare richiesta HTTP con intestazione in Swift

le API stati Imgur quanto segue circa l'autorizzazione necessaria per fare ottenere le richieste:

Per le risorse di sola lettura e anonimi pubblici, come ottenere un'immagine informazioni, ricerca dei commenti degli utenti, ecc. tutto ciò che devi fare è inviare un'intestazione di autorizzazione con il tuo client_id nelle tue richieste. Questo anche funziona se si desidera caricare immagini in modo anonimo (senza l'immagine
legata a un account), o se si desidera creare un anonimo
album. Questo ci consente di sapere quale applicazione sta accedendo all'API.

Authorization: Client-ID YOUR_CLIENT_ID 

Ho guardato le seguenti domande e provato cose suggerito lì, ma nessuno di loro hanno aiutato.

JSON NSURLRequest with credentials

Swift GET request with parameters

How to make a Http get and set httpHeader in Swift?

mio codice attuale è questa:

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() 

Ma io continuo ottenere un codice di stato 403, nel senso è necessaria l'autorizzazione. Che cosa sto facendo di sbagliato?

+0

C'è qualcosa che non va, forse nella vostra descrizione del problema, perché il codice di autorizzazione richiesto è 401: '{" dati ": {" errore ":" Autenticazione richiesta "," richiesta ":" \/3 \/galleria \/t \ ​​/ gatti "," metodo ":" GET "}," successo ": falso, "status": 401} 'quando si esegue esattamente il GET HTTP non autenticato sopra dal browser Chrome. 403 è "Proibito", il che significa che nessuna autorizzazione ti permetterà di ottenere quella pagina, è solo un'area bloccata. – BaseZen

+0

quando copio/incolla quell'url nel browser, ottengo la stessa risposta, codice di stato di 401. Ma quando lo si esegue in Xcode, il codice di stato è 403. Se rimuovo il metodo request.setValue in Xcode, il codice di stato cambia a 401. – joey

risposta

12

Penso che è necessario anteporre client-ID stringa per l'ID cliente attuale e per il valore di intestazione:

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

Potete aiutarmi. Sto facendo la stessa cosa per google books api ma sto ricevendo credenziali non valide. Per favore fatemi sapere se potete aiutarmi. –