在 Swift 中将 cUrl 命令转换为 HTTP 请求

Posted

技术标签:

【中文标题】在 Swift 中将 cUrl 命令转换为 HTTP 请求【英文标题】:Convert cUrl command to HTTP Request in Swift 【发布时间】:2017-07-05 14:57:53 【问题描述】:

我正在构建一个检查域可用性的应用程序。现在,我正在使用 goDaddy API;根据 goDaddy 的说法,检查 URL 可用性的方法是通过以下 cURL 命令:

curl -X GET -H "Authorization: sso-key API_KEY:API_SECRET" "https://api.godaddy.com/v1/domains/available?domain=example.guru"

现在,我正在尝试将该 cURL 命令转换为 Swift。我正在使用 Alamofire;但是,当我提出请求时,会出现如下错误:

必须指定凭据

我想知道如何解决这个问题。这是我当前的代码:

class ViewController: UIViewController 

    let key = "KEYKEYKEY"
    let secret = "SECRETSECRET"

    var headers: HTTPHeaders = [:]

    override func viewDidLoad() 
        super.viewDidLoad()

        let credential = URLCredential(user: key, password: secret, persistence: .forSession)

        Alamofire.request("https://api.godaddy.com/v1/domains/available?domain=example.guru")
            .authenticate(usingCredential: credential)
            .responseJSON  response in
                debugPrint(response)
        

        // Do any additional setup after loading the view, typically from a nib.
    

    override func didReceiveMemoryWarning() 
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    

【问题讨论】:

将密钥/秘密设置为标题?另外,我认为你的没有“sso-key”。 Alamofire.request("api.godaddy.com/v1/domains/available?domain=example.guru", headers: [String(format: "Authorization: sso-key %@:%@", key, secret)]).responseJSON 【参考方案1】:

我知道这不是使用 Alamofire,但这就是我实现它的方式。

import PlaygroundSupport
import Foundation
let key = "2s7Ymz8gu7_8XuTEeMFVmxJBLmyNNL4n8"
let secret = "8XuXAs8K37ejtYqvsEue2p"

let url = URL(string: "https://api.ote-godaddy.com/v1/domains/available?domain=example.guru&checkType=FULL")

var request = URLRequest(url: url!)

request.addValue("application/json", forHTTPHeaderField: "Accept")
request.addValue("sso-key \(key):\(secret)", forHTTPHeaderField: "Authorization")
let task = URLSession.shared.dataTask(with: request)  data, response, error in
    guard error == nil else 
        print(error!)
        return
    
    guard let data = data else 
        print("Data is empty")
        return
    

    let json = try! JSONSerialization.jsonObject(with: data, options: [])
    print(json)


task.resume()
PlaygroundPage.current.needsIndefiniteExecution = true

【讨论】:

以上是关于在 Swift 中将 cUrl 命令转换为 HTTP 请求的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Swift 中将 Int 转换为字符

在 Swift 中将 Int 转换为 String

在 Swift 中将字节数组转换为 UIImage

如何在 Swift 中将 NSDateComponents 转换为 DateComponents

如何在 Swift 中将 CMSampleBuffer 转换为数据?

在 Xcode 6 中将 .storyboard 文件转换为原始 swift 代码