首页 > 解决方案 > 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 作为响应 - 我想我可以弄清楚那部分。只是不知道我会打这个电话。

谢谢,

标签: iosswiftcurl

解决方案


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

推荐阅读