gpt4 book ai didi

swift - 使用 Swift URLSession 将 header 传递给 URL

转载 作者:行者123 更新时间:2023-11-28 07:19:50 24 4
gpt4 key购买 nike

我不想分享实际链接,因为它可能包含一些私有(private)信息,所以如果它不起作用,请不要感到惊讶。

我有一个看起来像这样的链接:www.somelink.com/stuff/searchmembers?member=John

还有一些我需要传递的 header ,比如 Login: Admin, Password: Admin

当我使用 this site 时一切似乎都工作得很好,我放置了链接,使其 GET 并以键:值格式放置 header ,结果我得到了所有成员的列表,但是我如何对 URLSession 做同样的事情?这是我目前拥有的,但我什么也没得到。我在那里做错了什么?

func getAllMembers(urlString: String) {

guard let url = URL(string: urlString) else { return }

var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Admin", forHTTPHeaderField: "Login")
request.setValue("Admin", forHTTPHeaderField: "Password")
request.httpBody = "member=John".data(using: .utf8)!


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

最佳答案

问题是:

您的 member=John 就是人们通常所说的“URL 查询参数”。通常,URL 请求将查询参数作为 URL 字符串本身的一部分,而不是请求的 httpbody


快速而肮脏的解决方案:

简单删除

request.httpBody = "member=John".data(using: .utf8)!

并将整个 "www.somelink.com/stuff/searchmembers?member=John" 传递到您的 getAllMembers(urlString:) 函数中应该可以解决问题。


更好的解决方案:

假设 John 的用户名是 j o h n。您的函数无法通过第一个 guard,因为空格不是有效的 URL 字符串字符。

我喜欢用 URLComponents因为它省去了处理空格等的麻烦。

这是我编写函数的方式:

func getJohnMember(urlString: String) {

//URLComponents to the rescue!
var urlBuilder = URLComponents(string: urlString)
urlBuilder?.queryItems = [
URLQueryItem(name: "member", value: "j o h n")
]

guard let url = urlBuilder?.url else { return }

var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Admin", forHTTPHeaderField: "Login")
request.setValue("Admin", forHTTPHeaderField: "Password")


URLSession.shared.dataTask(with: request) { (data, response, error) in
print(response)
print(String(data: data, encoding: .utf8)) //Try this too!
}.resume()
}

为了清楚起见,我会将 "www.somelink.com/stuff/searchmembers" 传递给该函数的第一个参数 urlString

现在,如果我在 guard let 之后 print(url),我会得到

www.somelink.com/stuff/searchmembers?member=j%20o%20h%20n

正如人们所期望的那样工作。

关于swift - 使用 Swift URLSession 将 header 传递给 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58518474/

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