3 svar
276 visningar
SewerSnake behöver inte mer hjälp
SewerSnake 3 – Fd. Medlem
Postad: 19 okt 2018 10:06

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 30613
Postad: 19 okt 2018 15:24

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 – Fd. Medlem
Postad: 19 okt 2018 17:40

Tack för tipset! Det ska jag testa!

SewerSnake 3 – Fd. Medlem
Postad: 20 okt 2018 17:17

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
Close