получить ошибку 401 при отправке запроса с использованием библиотеки XMLParsing swift

Я тестирую библиотеку XMLParsing (которая использует протокол Codable с XML-запросом)

Ссылка на библиотеку XMLParsing: https://github.com/ShawnMoore/XMLParsing

с помощью https://openweathermap.org API

ссылка API: «http://api.openweathermap.org/data/2.5/weather "

моя модель

struct weather:Codable {
    let q : String
    let appid : String
    let mode : String
}

и запрос

        var request = URLRequest(url: URL(string: "http://api.openweathermap.org/data/2.5/weather")!)
        request.httpMethod = "POST"

        let post2 = weather(q: "london", appid: "f4be702b940e5073d765cb2473f0b31b", mode: "xml")


        do{

            let body = try XMLEncoder().encode(post2, withRootKey: "current")

            request.httpBody = body

        } catch{}

        let session = URLSession.shared
        let task = session.dataTask(with: request) { data, response, error in
            if error != nil {
                print("error: \(String(describing: error))")// Handle error…
                return
            }

            guard let data = data else {return }

            print("response: \(response)")
           print("data: \(data)")


    }
        task.resume()

Не знаю, в чем проблема! Я всегда получаю код ошибки 401

response: Optional(<NSHTTPURLResponse: 0x600003bdedc0> { URL: http://api.openweathermap.org/data/2.5/weather } { Status Code: 401, Headers {
    "Access-Control-Allow-Credentials" =     (
        true
    );
    "Access-Control-Allow-Methods" =     (
        "GET, POST"
    );
    "Access-Control-Allow-Origin" =     (
        "*"
    );
    Connection =     (
        "keep-alive"
    );
    "Content-Length" =     (
        107
    );
    "Content-Type" =     (
        "application/json; charset=utf-8"
    );
    Date =     (
        "Mon, 14 Jan 2019 07:14:16 GMT"
    );
    Server =     (
        openresty
    );
    "X-Cache-Key" =     (
        "/data/2.5/weather?"
    );
} })
data: 107 bytes

но на PostMan он работает нормально и получает текущие данные

введите описание изображения здесь


person Basil    schedule 14.01.2019    source источник
comment
Проверить правильность параметра и ключа API?   -  person Abhishek Jadhav    schedule 14.01.2019
comment
Ваше изображение PostMan показывает, что параметры встроены в URL-адрес как параметр запроса, а не в XML. Ваш код Swift полностью отличается от вашего запроса PostMan.   -  person OOPer    schedule 14.01.2019
comment
Спасибо @OOPer, поэтому я отправил его в заголовке, и он должен быть как Параметры   -  person Basil    schedule 14.01.2019
comment
Я имел в виду Тело, а не Заголовок   -  person Basil    schedule 14.01.2019
comment
Рад видеть, что вы смогли решить свою проблему. Кстати, (просто мое любопытство), почему вы осмеливаетесь использовать xml (который сейчас не в моде, и вам нужно использовать стороннюю библиотеку для кодирования или декодирования), а не json? Формат вывода OpenWeatherMap по умолчанию - json.   -  person OOPer    schedule 14.01.2019
comment
@OOPer то же самое, что я сказал своей компании, но они сказали мне, что вы должны использовать XML, поэтому я просто тестировал с OpenWeatherMap = (   -  person Basil    schedule 15.01.2019


Ответы (1)


Спасибо @OOPer

Я помещаю его в качестве параметров в ссылку и меняю запрос на ПОЛУЧИТЬ, теперь он работает нормально

import UIKit
import XMLParsing


struct current:Codable {
    let city : City?
}

struct City:Codable {
    let id : String?

}

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()




        let request = URLRequest(url: URL(string: "http://api.openweathermap.org/data/2.5/weather?q=london&appid=f4be702b940e5073d765cb2473f0b31b&mode=xml")!)

        let session = URLSession.shared

        let task = session.dataTask(with: request) { (data, response, error) in



            do{

                guard (error == nil) else {
                    print("There is error")
                    return
                }

                guard let data = data else {return}

                let newData = try XMLDecoder().decode(current.self, from: data)

                print((newData.city?.id)!)

            }catch let error {
                print("there is error",error)
            }

            }
               task.resume()


    }


}
person Basil    schedule 14.01.2019