ios - 在 Swift 中通过 JSON 正文将字符串数组发布到 API
问题描述
我正在尝试将字符串数组上传到使用本地数据库中的数据的 Edamam API。对于 API,我需要发布一个带有标签“ingr”的字符串数组,以便它能够识别它。我应该能够输入"\(mass) grams \(name)"
每种成分的含量并得到分析所述成分的大量营养素的响应。我正在使用的代码:
API 配置:
func getData(strURL: String, dictParam: Dictionary<String, Any>, completion: @escaping(Dictionary<String, AnyObject>)->()) {
var request = URLRequest(url: URL(string: strURL)!)
request.httpMethod = "POST"
request.httpBody = try? JSONSerialization.data(withJSONObject: dictParam, options: [])
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
let session = URLSession.shared
let task = session.dataTask(with: request, completionHandler: { data, response, error -> Void in
print(response!)
do {
let json = try JSONSerialization.jsonObject(with: data!) as! Dictionary<String, AnyObject>
print(json)
completion(json)
} catch {
print("error")
}
})
task.resume()
}
接口调用:
let dictParams = ["ingr":["100 grams apple"]] as Dictionary<String, Any>
APICalling.shared.getData(strURL: baseURL, dictParam: dictParams) { (response) in
action()
}
}
使用 Rested 应用程序时,我可以上传任意数量的成分,并且会得到格式正确的响应,一切都很好。但是,当我尝试在我的应用程序中实现代码时,它会打印“错误”:冲突。任何想法如何正确实现 API 调用?
解决方案
找到了解决问题的方法。在我的请求中添加了一些标题,现在一切正常。
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
request.addValue("*/*", forHTTPHeaderField: "Accept")
request.addValue("no-cache", forHTTPHeaderField: "Cache-Control")
request.addValue("api.edamam.com", forHTTPHeaderField: "Host")
request.addValue("gzip, deflate", forHTTPHeaderField: "Accept-Encoding")
request.addValue("keep-alive", forHTTPHeaderField: "Connection")
推荐阅读
- windows - CMake 更改文件和文件夹权限
- angular - 如何将 Highcharts 渲染为 id 作为容器的 div - Angular?
- mysql - 为什么 ORDER BY 和 LIMIT 1 会大大减慢 MySQL 查询的速度?
- sql - Redshift 如果 TableA 包含数据,则 TRUNCATE TableB 和 INSERT TableA into TableB ELSE 什么都不做
- c# - 使用 CollectionSynchronization 更新 ObservableCollection
- android - 无法从我的 android 应用 (Android Studio) 访问可移动 SD 卡
- javascript - 具有不同路线和内容的 Angular 同一页面
- angular - 如何准备异步数据?
- regex - Git修订版不包含单词
- c# - 无法弄清楚将此类添加到 .net mvc 的 html 中的位置