gpt4 book ai didi

swift - 如何通过 Swift URLSession 使用 cURL 请求

转载 作者:行者123 更新时间:2023-11-30 10:35:29 24 4
gpt4 key购买 nike

我有一个如下所示的请求:

curl --header "token: YOUR TOKEN HERE" --data "a=new_session" site url

我理解并可以通过终端使用它,但我正在尝试使用 Swift 来完成它,并且在了解如何传递参数和发出请求时遇到一些问题。

我尝试过的:

guard let url = URL(string: siteURL) else { return }
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.addValue(token, forHTTPHeaderField: "token")
request.addValue("new_session", forHTTPHeaderField: "a")

URLSession.shared.dataTask(with: request) { (data, response, error) in
guard error == nil else { print(error!.localizedDescription); return }
guard let data = data else { print("Empty data"); return }

if let str = String(data: data, encoding: .utf8) {
print(str)
}
}.resume()

这似乎不起作用,我对所有这些网络东西都很陌生,我什至不知道为什么我们在“:”之后传递 token ,在“=”之后传递new_session,所以我将不胜感激。 !

最佳答案

你的解决方案几乎是正确的。您只是错误地从curl 请求转换了--data 标志。数据的格式是表单编码的,因为它的格式为key=value。因此,您只需将表单编码数据(在本例中为 a=new_session)添加到 HTTP 请求的正文中,而不是作为 header 。另外,请确保设置正确的内容类型。

它看起来像这样:

func makeRequest(siteURL: String, token: String) {
guard let url = URL(string: siteURL) else { return }

var request = URLRequest(url: url)
request.httpMethod = "POST"
request.addValue(token, forHTTPHeaderField: "token")

// These two lines are what you were missing.
request.httpBody = "a=new_session".data(using: .utf8)!
request.addValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")

URLSession.shared.dataTask(with: request) { (data, response, error) in
// handle the request
}.resume()
}

URLSession 请求和 curl 请求现在应该是等效的。

关于swift - 如何通过 Swift URLSession 使用 cURL 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58147319/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com