joe*_*oey 16 imgur ios nsurlsession swift
我正在尝试向Imgur API发出HTTP请求.我正在尝试检索与标签"cats"相关的所有图像.根据Imgur API,网址为:https://api.imgur.com/3/gallery/t/cats
Imgur API声明了以下有关获取请求所需的授权:
对于公共只读和匿名资源,例如获取图像信息,查找用户评论等,您只需要
client_id在您的请求中发送授权标题.如果您想要匿名上传图像(图像
不附加到帐户),或者您想要创建匿名
相册,这也适用.这让我们知道哪个应用程序正在访问API.Run Code Online (Sandbox Code Playgroud)Authorization: Client-ID YOUR_CLIENT_ID
我看了下面的问题,并尝试了那里的建议,但没有一个有帮助.
如何在Swift中创建一个Http get并设置httpHeader?
我目前的代码是这样的:
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()
Run Code Online (Sandbox Code Playgroud)
但我不断获得403的状态代码,这意味着需要授权.我究竟做错了什么?
小智 23
我认为您需要将Client-ID字符串添加到您的实际客户端ID以及标头值:
request.setValue("Client-ID <your_client_id>", forHTTPHeaderField: "Authorization")
Run Code Online (Sandbox Code Playgroud)
更新为 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()
}
Run Code Online (Sandbox Code Playgroud)