带参数的 GET 请求

Posted

技术标签:

【中文标题】带参数的 GET 请求【英文标题】:GET request with parameters 【发布时间】:2017-03-09 13:37:07 【问题描述】:

在 swift 3 中,对于带参数的 GET 推荐哪种方式?

例子:

https://my-side.com/data?token=AS7F87SAD84889AD/

提前致谢!

【问题讨论】:

NSURLQueryItem. 【参考方案1】:

示例如何将URLQueryItem 用于请求。

func getRequest(params: [String:String]) 

    let urlComp = NSURLComponents(string: "https://my-side.com/data")!

    var items = [URLQueryItem]()

    for (key,value) in params 
        items.append(URLQueryItem(name: key, value: value))
    

    items = items.filter!$0.name.isEmpty

    if !items.isEmpty 
      urlComp.queryItems = items
    

    var urlRequest = URLRequest(url: urlComp.url!)
    urlRequest.httpMethod = "GET"
    let config = URLSessionConfiguration.default
    let session = URLSession(configuration: config)

    let task = session.dataTask(with: urlRequest, completionHandler:  (data, response, error) in
    )
    task.resume()



getRequest(params: ["token": "AS7F87SAD84889AD"])

【讨论】:

如果我没记错的话,如果items 为空(无参数),它将添加一个“?”在 URL 上,这可能会导致 404。只有当 items 不为空时,urlComp.queryItems = items 也是如此,不是吗? 嗨 @OlegGordiichuk 我将在哪个页面上调用 getRequest(params: ["token": "AS7F87SAD84889AD"]) ?【参考方案2】:

我正在像这样处理我的 http 请求:

func getData(completionHandler: @escaping ((result:Bool)) -> ()) 

        // Asynchronous Http call to your api url, using NSURLSession:
        guard let url = URL(string: "https://my-side.com/data?token=AS7F87SAD84889AD/") else 
            print("Url conversion issue.")
            return
        

        var request = URLRequest(url: url)

        request.httpMethod = "GET"

        URLSession.shared.dataTask(with: request, completionHandler:  (data, response, error) -> Void in
            // Check if data was received successfully
            if error == nil && data != nil 
                do 
                    // Convert NSData to Dictionary where keys are of type String, and values are of any type
                    let json = try JSONSerialization.jsonObject(with: data!, options: JSONSerialization.ReadingOptions.mutableContainers) as! [String:AnyObject]

                    //do your stuff

                    completionHandler(true)

                 catch 
                    completionHandler(false)
                
            
            else if error != nil
            
                completionHandler(false)
            
        ).resume()
    

【讨论】:

如何在请求中添加参数? url包含参数。 这有点不正确,因为它不灵活,只是硬编码 @OlegGordiichuk 你是对的,每次输入后令牌都会改变。但这并不意味着它不是一种方法——不是最好的,而是一些。谢谢你们两位的帮助!

以上是关于带参数的 GET 请求的主要内容,如果未能解决你的问题,请参考以下文章

requests不带参数的get请求和带get参数请求

python+requests——不带参数的get请求

curl发送get请求带param

python+requests——发送带参数的get请求

OVH JAVA API 使用带参数的 Get 请求

带参数的 Swift GET 请求