使用Swift URLSession将标题传递到URL
我不想分享实际的链接,因为它可能有一些私人信息,所以如果它不起作用,请不要感到惊讶 我有一个这样的链接:使用Swift URLSession将标题传递到URL,swift,url,nsurlsession,Swift,Url,Nsurlsession,我不想分享实际的链接,因为它可能有一些私人信息,所以如果它不起作用,请不要感到惊讶 我有一个这样的链接:www.somelink.com/stuff/searchmembers?member=John 还有一些我需要传递的标题,比如Login:Admin,Password:Admin 当我使用一切看起来都很好的时候,我把链接放到key:value格式中,并把标题放在key:value格式中,结果我得到了所有成员的列表,但是我怎么能对URLSession做同样的事情呢?这是我目前拥有的,但我什么都
www.somelink.com/stuff/searchmembers?member=John
还有一些我需要传递的标题,比如Login:Admin,Password:Admin
当我使用一切看起来都很好的时候,我把链接放到key:value格式中,并把标题放在key:value格式中,结果我得到了所有成员的列表,但是我怎么能对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本身
func getAllMembers(urlString: String) {
guard let url = URL(string: "\(urlString)?member=John") 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(data)
}.resume()
}
您的
member=John
实际上是一个URL查询参数,因此它应该是URL的一部分,而不是URL请求
您应该使用URLComponents,因为它会自动对必要的内容进行百分比编码(例如,如果John有一个时髦的用户名,如member=J%hn
?),那该怎么办(这在过去让我头疼)
request.httpBody=“member=John”。数据(使用:.utf8)代码>,这不会将其添加到URL的末尾。我不熟悉Reqbin,也不支持POSTMAN,但后来的解决方案可以生成Swift代码(不漂亮),但足够理解,可以发现你们和他们之间的问题。你们有没有和POSTMAN一起尝试过这个方法?我不知道POSTMAN,但它确实起到了作用。谢谢URLQueryItem
是添加该成员名称的正确方法,而不是附加到url。公认的答案正确地涵盖了这一点。这会有用的,但是。。。“这没有错,但我们就是不这么做”——戈登。
func getAllMembers(urlString: String) {
//URLComponents to the rescue!
var urlBuilder = URLComponents(string: urlString)
urlBuilder?.queryItems = [
URLQueryItem(name: "member", value: "John")
]
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()
}