3 svar
36 visningar
SewerSnake är nöjd med hjälpen!
SewerSnake 3
Postad: 19 okt 2018

Ha en 'empty body' vid GET i Swift

Hej!

Jag försöker göra GET till ett API. Har en så kallad "X-Trackertoken" i min app, som skickas med i header:n. Denna identifierar användaren.

Har hört talas om på "Stack Overflow" att själva http-body måste vara tomt för att GET anropet ska lyckas. Jag har testat med nil, Data() och att helt enkelt inte ha med request?.httpBody alls. Ingenting fungerar... Får statuskoden 401 Unauthorized. Vet ni hur man ska sätta http-body?

 

Här är metoden jag använder för POST anropet. request är en instansvariabel i klassen.

 

func formValuesAPICall(url: String, params: [String: String], method: HttpMethod, success: @escaping(Data?, HTTPURLResponse?, NSError?) -> Void, failure: @escaping(Data?, HTTPURLResponse?, NSError?) -> Void) {

        

        request = URLRequest(url: URL(string: url)!)

        

        if (!params.isEmpty) {

            let config = URLSessionConfiguration.default

            

            config.timeoutIntervalForRequest = 10

            config.timeoutIntervalForResource = 10

            print("X-Trackertoken form values call: \(params["X-Trackertoken"] ?? "")")

            config.httpAdditionalHeaders = [

                "Accept": "application/json",

                "Content-Type": "application/x-www-form-urlencoded",

                "X-Trackertoken": params["X-Trackertoken"] ?? ""

            ]

            

            if (method.rawValue == "GET") {

                //request?.httpBody = nil

                //request?.httpBody = Data()

                request?.httpBody = encodeParameters(params)

            } else if (method.rawValue == "POST") {

                request?.httpBody = encodeParameters(params)

            }

            

            request?.httpMethod = method.rawValue

            

            session = URLSession(configuration: config)

            

            session?.dataTask(with: request! as URLRequest) { (data, response, error) -> Void in

                

                if let data = data {

                    

                    if let response = response as? HTTPURLResponse, 200...299 ~= response.statusCode {

                        success(data, response, error as NSError?)

                    } else {

                        failure(data, response as? HTTPURLResponse, error as NSError?)

                    }

                } else {

                    failure(data, response as? HTTPURLResponse, error as NSError?)

                }

            }.resume()

        }

    }

Laguna 1734
Postad: 19 okt 2018

Jag kan inte Swift, men kan du prova med någon annan metod, t. ex. programmet curl, för att se om det fungerar över huvud taget, och att ditt token är korrekt?

SewerSnake 3
Postad: 19 okt 2018

Tack för tipset! Det ska jag testa!

SewerSnake 3
Postad: 20 okt 2018

Prövade med curl!
Min X-Trackertoken visar sig vara fel, så jag får ta ett snack med min lärare.

Tack för hjälpen!

Svara Avbryt
Close