ios - Swift - 如何发出 cURL 请求?(Swift 5.2 / macOS Catalina)
问题描述
我正在 MacOS 上开发一个测试应用程序 - 用于 Mac 桌面。希望对 Gumroad(数字产品销售商)进行 API 调用。他们说我们必须发出一个 cURL 请求:像这样 -
curl https://api.gumroad.com/v2/licenses/verify \
-d "product_permalink=QMGY" \
-d "license_key=YOUR_CUSTOMERS_LICENSE_KEY" \
-X POST
我对 swift 和所有 MacOS 开发都很陌生。不知道我将如何做到这一点 - 很多文档都是多年前的或 iOS 的,或者谈论其他 http 请求(我不知道如何将其与进行 cURL 调用联系起来)这使得它变得困难。任何帮助表示赞赏。
该调用返回一个 JSON 作为响应 - 我想我可以弄清楚那部分。只是不知道我会打这个电话。
谢谢,
解决方案
curl
实际上是unix系统中进行网络调用的应用程序。
要在 Swift 中进行 Http 调用,您需要这样做
// Prepare URL
let url = URL(string: "https://api.gumroad.com/v2/licenses/verify")
guard let requestUrl = url else { fatalError() }
// Prepare URL Request Object
var request = URLRequest(url: requestUrl)
request.httpMethod = "POST"
// Set HTTP Request Body
let params = ["product_permalink": "QMGY", "license_key": "YOUR_CUSTOMERS_LICENSE_KEY"]
let jsonData = try? JSONEncoder().encode(params)
request.httpBody = jsonData
// Set HTTP Requst Header
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.setValue("application/json", forHTTPHeaderField: "Accept")
// Perform HTTP Request
let task = URLSession.shared.dataTask(with: request) { (data, response, error) in
guard let data = data else {
// handle no response failure
}
print("data: \(String(describing: String(bytes: data, encoding: .utf8)))")
guard error == nil else {
// handle network error
}
do {
// decode json data
let decoder = JSONDecoder()
let object = try decoder.decode(DATA_TYPE, from: data) // <= substitute DATA_TYPE
// handle success
} catch let error {
// handle json decoding error
}
}
task.resume()
推荐阅读
- algorithm - 置换外部存储器的实用算法
- angular - 我可以在请求中使用名称而不是 id 吗?
- amazon-web-services - 使用名称标签创建 ec2 服务器实例
- c# - 打印不带预览的 rdlc
- google-cloud-ml - cloud-ml 作业在运行数千步后取消
- php - 如何在没有绑定参数的情况下检查 MySQL 注入的变量
- android - 如何在 RecyclerView 适配器中添加 switch 语句?
- javascript - 如何使用按钮编辑或输入焦点 InputElement
- javascript - Promises:如何解决未知数量的 Promise
- php - 如何循环上传多个文件然后添加到我的 json 数组中?