swift URLRequest не отправляет параметры

В коде ниже

    let bodyData = "?sub=\(id)&name=User&email=test@test.com"
    let url = NSURL(string: "https://httpbin.org/get");
    let request:NSMutableURLRequest = NSMutableURLRequest(url:url as! URL)
    request.httpMethod = "GET"
    request.httpBody = bodyData.data(using: String.Encoding.utf8);
    NSURLConnection.sendAsynchronousRequest(request as URLRequest, queue: OperationQueue.main)
    {
        (response, data, error) in
        if let HTTPResponse = response as? HTTPURLResponse {
            let statusCode = HTTPResponse.statusCode

            if statusCode == 200 {
                // Yes, Do something. 
                let json = try? JSONSerialization.jsonObject(with: data!, options: [])
                if let dictionary = json as? [String: Any] {
                    let args = dictionary["args"]
                    NSLog("args:\(args)")
                    for (key, value) in dictionary{
                        NSLog("key:\(key) value:\(value)")
                    }
                }
            }
        }
    }

id - это строка, переданная в функцию.

Он вернул верные данные, но тестовый сайт / URL-адрес также возвращает в формате json любые отправленные вами параметры. Но этот фрагмент кода, похоже, не отправляет параметры запроса, определенные в bodyData, и я не могу понять, почему.

1 ответ

Если используется запрос GET, параметры добавляются к URL-адресу и явно URLRequest не нужен вообще.

Этот код является родным Swift 3 и использует современный API:

let id = 12

let bodyData = "?sub=\(id)&name=User&email=test@test.com"
let url = URL(string: "https://httpbin.org/get" + bodyData)!

URLSession.shared.dataTask(with: url) { (data, response, error) in

    if error != nil  {
        print(error!)
        return
    }

    do {
       if let json = try JSONSerialization.jsonObject(with: data!, options: []) as? [String:Any],
          let args = json["args"] as? [String:Any] {
            print("args:\(args)")
            for (key, value) in args{
                print("key:\(key) value:\(value)")
            }
        }
    } catch {
        print(error)
    }
}.resume()
Другие вопросы по тегам