Alamofire 5: НЕ соблюдайте пользовательские заголовки HTTP - PullRequest
0 голосов
/ 08 мая 2018

Я следовал этому руководству на Medium, чтобы написать роутер для новой ветки Alamofire 5: https://medium.com/@AladinWay/write-a-networking-layer-in-swift-4-using-alamofire-and-codable-part-1-api-router-349699a47569

Пример маршрутизатора здесь: https://github.com/AladinWay/NetworkingExample/blob/master/Networking/APIClient/APIRouter.swift

Заголовки устанавливаются так:

// Common Headers
urlRequest.setValue(ContentType.json.rawValue, forHTTPHeaderField: HTTPHeaderField.acceptType.rawValue)
urlRequest.setValue(ContentType.json.rawValue, forHTTPHeaderField: HTTPHeaderField.contentType.rawValue)

Однако, когда я смотрю в Charles Proxy, заголовки на самом деле не установлены правильно:

enter image description here

Таким образом, похоже, что кодовая база в этом учебном пособии не в состоянии достичь того, о чем она заявляет.

Вы можете локально воспроизвести на своем компьютере, клонировав и запустив проект, и убедиться, что заголовки НЕ установлены ни в каком анализаторе пакетов:

git clone https://github.com/AladinWay/NetworkingExample.git

Я бы хотел использовать Alamofire 5, но как мне на самом деле заставить заголовки правильно устанавливать запрос? Я предполагаю, что мне нужно настроить Alamofire с моей собственной URLSessionConfiguration - что-то вроде этого?

import Alamofire

class APIClient {
@discardableResult
private static func performRequest<T:Decodable>(route:APIRouter,
                                                decoder: JSONDecoder = JSONDecoder(),
                                                completion:@escaping (Result<T>)->Void) -> DataRequest {

    var defaultHeaders = Alamofire.SessionManager.defaultHTTPHeaders
    defaultHeaders["Content-Type"] = "application/json"
    defaultHeaders["Accept"] = "application/json"

    let configuration = URLSessionConfiguration.default
    configuration.httpAdditionalHeaders = defaultHeaders

    let manager = Alamofire.SessionManager(configuration: configuration)

    return manager.request(route).responseJSONDecodable (decoder: decoder){ (response: DataResponse<T>) in
            completion(response.result)
    }
}

Я попробовал это, но это не сработало. Я новичок в Alamofire 5, поэтому пока не знаю, как с ним работать.

Помощь!

...