Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Swift URLSession将标题传递到URL_Swift_Url_Nsurlsession - Fatal编程技术网

使用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()
}