ios - 如何传递不记名令牌以使用 URLSessoin 进行 Yelp API 调用
问题描述
更新 D... 具有什么功能的功能!我想将 yelp api 合并到应用程序中,但无法在 URL 字符串上成功传递我的授权令牌。我需要做些什么来将 URLRequest 连接到 URLSessoin 调用并且它不使用标头吗?也许键值对是错误的?以下函数返回:
error = {
code = "TOKEN_MISSING";
description = "An access token must be supplied in order to use this endpoint.";
};
我能够使用邮递员来使 yelp API 调用正常工作,但只能通过单击邮递员上的“标题”部分并输入 Bearer,然后输入我的 yelp 键。我用谷歌搜索了一下,发现一些链接表明您可以向 URLSession 添加一个标题,我认为它可以像邮递员那样工作,但我无法让它工作。
我知道有一些带有 yelp API 存储库的 github,但我试图不将大量我不理解的代码安装到我的应用程序中,而我想要的只是我可以看到的 JSON 来自邮递员。谁能帮我理解我将如何编辑类似于下面的示例的代码,以便我可以获得 yelp 所需的授权/承载?
func getYelp() {
let appSecret = "Bearer <YELP APIKEY>"
let link = "https://api.yelp.com/v3/businesses/search?latitude=37.786882&longitude=-122.399972"
if let url = URL(string: link) {
// Set headers
var request = URLRequest(url: url)
request.setValue("Accept-Language", forHTTPHeaderField: "en-us")
request.setValue(appSecret, forHTTPHeaderField: "Authorization")
print("Attempting to get places around location from Yelp")
let task = URLSession.shared.dataTask(with: request) { (data, response, error) in
if error != nil {
print(error!)
} else {
if let urlContent = data {
do {
let jsonResult = try JSONSerialization.jsonObject(with: urlContent, options: JSONSerialization.ReadingOptions.mutableContainers) as AnyObject // Added "as anyObject" to fix syntax error in Xcode 8 Beta 6
print("Printing all JSON/n/n//n--------------------------")
print(jsonResult)
print("Printing from results/n/n//n--------------------------")
if let description = ((jsonResult["search"] as? NSDictionary)?["context"] as? NSDictionary)?["href"] as? String {
} else {
print("JSON pull failed/n/n//n--------------------------")
}
} catch {
print("JSON Processing Failed/n/n//n--------------------------")
}
}
}
}
task.resume()
} else {
resultLabel.text = "Couldn't get results from Here"
}
}
解决方案
假设您有一个带有“ https://google.com ”的 api(这只是一个带有假密钥的示例)和一个 api 密钥为“ApiKey: 92927839238293d92d98d98d92”。
然后,您将获取此信息并执行此操作。
let uri = URL(string:"https://google.com")
if let unwrappedURL = uri {
var request = URLRequest(url: unwrappedURL)request.addValue("92927839238293d92d98d98d92", forHTTPHeaderField: "ApiKey")
let dataTask = URLSession.shared.dataTask(with: request) { (data, response, error) in
// you should put in error handling code, too
if let data = data {
do {
let json = try JSONSerialization.jsonObject(with: data, options: [])
// HERE'S WHERE YOUR DATA IS
print(json)
} catch {
print(error.localizedDescription)
}
}
}
dataTask.resume()
}
请记住,您将用您的 GET 地址替换 google.com,用您自己的 api 键值替换 APIKey 标头。此外,这将像 PostMan 一样打印出所有 JSON。如果这对您有用,那么我还有一个访问 JSON 对象的链接。
推荐阅读
- c# - C# Multithreading conflicts on shared variables
- c - 循环遍历 C 中的索引
- windows - How to resolve IP Addresses into Hostnames in Windows Kernel Driver
- php - PHP 将主页徽标链接到主页(来自 wordpress.org 的预制主题)
- java - 我在修复继承中的“getter”和“setter”时遇到问题
- c++ - C ++中的哈希表实现 - 如何返回具有特定值的键
- javascript - 如何在忽略某些键的同时转换对象中的某些值?
- javascript - 使用 RxJS 每 350 毫秒触发一次队列事件
- android - Receiving simple data from other apps launches another application
- python - Counting words in a dictionary python