Я пытаюсь сделать URLRequest, но мне нужно добавить ключ SSL и пароль к запросу, но я не нашел ни одного примера того, как это сделать.

Это мои просьбы:

func requestFactory(request:URLRequest, completion:@escaping (_ data:Data?)->Void){  
let task = URLSession.shared.dataTask(with: request, completionHandler: { (data, urlRequestResponse, error) in

    if error != nil{
        completion(data)
    }
})
task.resume()

}

Я очень признателен за вашу помощь.

1
user2924482 16 Ноя 2017 в 02:43

1 ответ

Лучший ответ

Swift 4 Предполагая, что вы приобрели сертификат SSL, Google, как преобразовать сертификат пакета SSL (файл .crt) в формат .der с помощью OpenSSL в Терминале. Найдите файл .der, который вы создали в своей файловой системе, и перетащите его в папку проекта в Xcode. Затем перейдите в корень проекта и в разделе «Фазы сборки» щелкните раскрывающийся список «Копировать ресурсы пакета» и нажмите кнопку «+», чтобы добавить файл .der в список ресурсов.

Затем вам нужно будет создать класс, реализующий URLSessionDelegate (в моем случае я назвал его URLSessionPinningDelegate), и когда вы сформулируете свой вызов URLSession, вы передадите этот класс в качестве делегата. Вы должны взглянуть на то, как реализовать закрепление сертификата SSL, чтобы получить инструкции о том, как реализовать этот класс. На этом сайте здесь есть идеальное и функциональное объяснение. о том, как это сделать.

Ниже приведен пример того, как настроить сеанс и задачу. Пароль будет передан в заголовке URLRequest при вызове request.setValue, поэтому также ознакомьтесь с этой документацией. Это должно помочь вам начать работу после того, как вы выяснили закрепление сертификата SSL и настроили бэкэнд для аутентификации пароля пользователя, а также установили доверие для сертификата на стороне клиента.

if let url = NSURL(string: "https://www.example.com") { // Your SSL server URL
var request = URLRequest(url: url as URL)
let password = "" // Your password value
request.setValue("Authorization", forHTTPHeaderField: password)

let session = URLSession(
configuration: URLSessionConfiguration.ephemeral,
delegate: URLSessionPinningDelegate(),
delegateQueue: nil)

С добавленными параметрами сеанса и запроса ваш код будет выглядеть так:

let task = session.dataTask(with: request, completionHandler: { (data, response, error) in
            if error != nil {
                print("error: \(error!.localizedDescription): \(error!)")
            } else if data != nil {
                if let str = NSString(data: data!, encoding: String.Encoding.utf8.rawValue) {
                    print("Received data:\n\(str)")
                } else {
                    print("Unable to convert data to text")
                }
            }
        })

        task.resume()
2
elarcoiris 7 Дек 2017 в 01:14