Вызов API Swift с URLSession выдает ошибку 504

У меня есть вызов API с oauth, который я проверял с правильным токеном авторизации в почтальоне. Я получаю правильный ответ в почтальоне. Но когда я пытаюсь сделать то же самое в Swift, я получаю 504 ошибку.

Я проверил все параметры и заголовки правильно, и все выглядит так же, как почтальон. Не уверен, почему samething работает в почтальоне и выдает ошибку 504 в swift. в чем может быть проблема?

var params = [String : String]()
params["Id"] = Id;

var headers = [String : String]()
headers["api-key"] = "XXXXXX"
headers["Authorization"] = "Bearer XXX" 

do{
    var request = URLRequest(url: URL(string: getURL())!)
    request.allHTTPHeaderFields = headers
    request.httpBody = try JSONSerialization.data(withJSONObject: params , options: [])
    request.httpMethod = "GET"
    let task = URLSession.shared.dataTask(with: request) { (data, response, error) in
        let httpResponse = response as! HTTPURLResponse
        print(httpResponse)
    }
    task.resume()
}catch{
}

1 ответ

Решение

При использовании запроса GET тело запроса не указывается. Все идет по URL.

Также вы уверены, что в Почтальоне вы используете только эти 2 заголовка?

Посмотрите, работает ли что-то подобное для вас:

var params: Parameters = Parameters()
params.updateValue(Id, forKey: "Id")

var components = URLComponents(string: getURL())!
components.queryItems = params.map { (key, value) in
    URLQueryItem(name: key, value: value)
}
components.percentEncodedQuery = components.percentEncodedQuery?.replacingOccurrences(of: "+", with: "%2B")
let request = URLRequest(url: components.url!)
request.setValue("XXXXXX", forHTTPHeaderField: "api-key")
request.setValue("Bearer XXX", forHTTPHeaderField: "Authorization")
request.httpMethod = "GET"
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    guard let data = data, error == nil else {                                                 // check for fundamental networking error
        print("error=\(error)")
        return
    }

    if let httpStatus = response as? HTTPURLResponse, httpStatus.statusCode != 200 {           // check for http errors
        print("statusCode should be 200, but is \(httpStatus.statusCode)")
        print("response = \(response)")
    }

    let responseString = String(data: data, encoding: .utf8)
    print("responseString = \(responseString)")
}
task.resume()
Другие вопросы по тегам