将 CURL 转换为 URLRequest

Posted

技术标签:

【中文标题】将 CURL 转换为 URLRequest【英文标题】:Convert CURL to URLRequest 【发布时间】:2018-03-28 11:42:08 【问题描述】:

我正在尝试将 Swagger 给我的以下 curl 请求转换为 URLRequest:

curl -X GET --header 'Accept: application/json' 
--header 'Authorization: key ttn-account-v2.<app-key>'
 'https://<app-id>.data.thethingsnetwork.org/api/v2/query'

URL 和标头设置正确。我仍然得到响应:401 - 未授权。

let key = "ttn-account-v2.<app-key>"

let url = URL(string: "https://<app-id>.data.thethingsnetwork.org/api/v2/query")

var request = URLRequest(url: url!)

request.httpMethod = "GET"
request.addValue("application/json", forHTTPHeaderField: "Accept")
request.addValue("key \(key)", forHTTPHeaderField: "Authorization")

let task = URLSession.shared.dataTask(with: url!)  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()

我错过了什么吗?

【问题讨论】:

您确定密钥标题正确吗?检查它是否没有将其作为 Optional(...) 【参考方案1】:

出了什么问题,您创建了一个完美的请求,然后通过只使用 url 而不是请求的 dataTask 将其全部跳过。这样HTTPHeaders 不会随请求一起发送,因此它没有被授权。 只需将任务创建行更改为:

let task = URLSession.shared.dataTask(with: req)  data, response, error in 
    ...

【讨论】:

以上是关于将 CURL 转换为 URLRequest的主要内容,如果未能解决你的问题,请参考以下文章

将 CURL 转换为 URLRequest

将 CURL 转换为 $.Ajax

将命令 curl 转换为 javascript

将 curl 命令转换为 httparty

将 cURL 命令转换为 python 请求

cloudflare api 将 curl 转换为 php curl 并发送 CNAME 更新