Есть ли другой способ отправки HTTP-запроса «POST» без использования сторонних библиотек с использованием настраиваемого заголовка и тела? - PullRequest
0 голосов
/ 22 января 2019

Я пытаюсь отправить HTTP-запрос «POST» для веб-службы, которая должна вернуть изображение в кодировке base64. Это пример HTTP-запроса для службы:

https://imgur.com/a/XTbVxEW

Я пытаюсь сделать следующее:

func fetchPicture(username: String, password: String) {
    let url = URL(string: "https://myurl.com/download/bootcamp/image.php")!
    var request = URLRequest(url: url)
    request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")
    request.httpMethod = "POST"
    request.setValue(password.stringToSHA1Hash(), forHTTPHeaderField: "Authorization")
    let postString = "username=\(username)"
    request.httpBody = postString.data(using: .utf8)
    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()
}

Я получаю сообщение об ошибке 401 Unauthorized, я не знаю, так ли это, потому что мой запрос плохой, или просто инициалы входа в систему. Было бы замечательно, если бы кто-то мог просмотреть код и сказать мне, действительно ли он соответствует приведенному выше примеру запроса.

Спасибо!

Ответы [ 2 ]

0 голосов
/ 13 февраля 2019

Как оказалось, я неправильно использовал функцию хеширования CommonCrypto, но вместо этого я использовал:

https://github.com/apple/swift-package-manager/blob/master/Sources/Basic/SHA256.swift

И возвращенный им хэш SHA256 был тем, который мне был нужен, возможно, это может кому-то помочь в будущем.

0 голосов
/ 22 января 2019

Первое, что я заметил, это то, что вы не устанавливаете HTTP-метод запроса:

request.httpMethod = “POST”
...