Отправка HTTP-запроса POST с помощью Swift to Discord Webhook приводит к ошибке ответа - PullRequest
0 голосов
/ 07 октября 2019

Я пытаюсь создать URL-запрос в Swift, чтобы отправить HTTP-запрос POST на Discord Webhook, и запрос завершается с ошибкой, определенной как 'responseProblem'. Я не уверен, откуда возникла проблема с ответом.

Технически Discord должна быть в состоянии принимать HTTP-запросы, и куча исследований по этой проблеме ни к чему не привели. Раньше я работал с веб-игроками Discord, но никогда раньше не играл с подобными вещами, поэтому я немного застрял в том, что мне следует делать сейчас.

import Foundation

enum APIError:Error {
    case responseProblem
    case decodingProblem
    case encodingProblem
}


struct APIRequest {
    let resourceURL: URL

    init(endpoint: String) {
        let resourceString = "<discord-webhook-url-removed-for-privacy>"
        guard let resourceURL = URL(string: resourceString) else {fatalError()}

        self.resourceURL = resourceURL

    }

    func save (_ messageToSave:Message, completion: @escaping(Result<Message, APIError>) -> Void ) {

        do {
            var urlRequest = URLRequest(url: resourceURL)
            urlRequest.httpMethod = "POST"
            urlRequest.addValue("application/json", forHTTPHeaderField: "Content-Type")
            urlRequest.httpBody = try JSONEncoder().encode(messageToSave)

            let dataTask = URLSession.shared.dataTask(with: urlRequest) { data, response, _ in
                guard let httpResponse = response as? HTTPURLResponse, httpResponse.statusCode == 200, let
                    jsonData = data else {
                        completion(.failure(.responseProblem)) // <<< 'responseProblem' is outputted in console as the error
                        return
                }

                do {
                    let messageData = try JSONDecoder().decode(Message.self, from: jsonData)
                    completion(.success(messageData))
                } catch {
                    completion(.failure(.decodingProblem))
                }

            }
            dataTask.resume()
        } catch {
            completion(.failure(.encodingProblem))
        }

    }

}

Когда я запускаю этот SwiftЯ ожидал, что программа отправит запрос на Discord Webhook, чтобы отправить сообщение на назначенный канал. Однако единственная ошибка, выводимая в консоль, это responseProblem. Пожалуйста, дайте мне знать, если есть что-то еще, что мне нужно добавить, чтобы получить основную причину проблемы (я все еще немного новичок в Swift, и я обычно работаю с JavaScript, поэтому я не уверен, как правильно отладить вSwift и Xcode.)

Приложение Swift встроено в iOS 12.2, потому что Xcode не любит этот материал в iOS 13

...