ios - 将 CURL 转换为 URLRequest

标签 ios swift curl urlrequest urlsession

我正在尝试将 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 和 header 设置正确。我仍然收到回复: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()

我错过了什么吗?

最佳答案

问题在于您创建了一个完美的请求,但随后通过仅使用 url 而不是请求执行 dataTask 来跳过所有请求。这样,HTTPHeaders 不会随请求一起发送,因此未获得授权。 只需将任务创建行更改为:

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

关于ios - 将 CURL 转换为 URLRequest,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46779004/

相关文章:

authentication - 针对 API 服务器的 kubernetes 身份验证

ios - Swift 3 - 按钮动画向右跳转

ios - 网络请求后 SwiftUI 更新 Elements.count

ios - AFNetworking iOS 添加 curl

node.js - 在 Express/Node 服务器中通过 HTTP POST 接受 wav 音频文件

ios - Alamofire 错误代码=-1000 "The URL does not point to a file URL"

ios - 是否可以仅覆盖表单的暗模式?

ios - UITextView 内的 UITextField 一次性关闭键盘

iphone - 在核心图中配置轴

SwiftUI 导航 View : how to update previous view every time coming back from the secondary view