add header to URLSessionWebSocket

1.6k Views Asked by At

I'm working withURLSessionWebSocket to learn more about it. I'm using this class for it

my question is, how can I add authentication header to it? (Content-Type, ACCOUNT-AUTHORIZATION and SUB-AUTHORIZATION)

thank you so much

lass WebSocketConnector : NSObject {
    
    var didOpenConnection : (()->())?
    var didCloseConnection : (()->())?
    var didReceiveMessage : ((_ message : String)->())?
    var didReceiveData : ((_ message : Data)->())?
    var didReceiveError : ((_ error : Error)->())?

    
    
    var urlSession : URLSession!
    var operationQueue : OperationQueue = OperationQueue()
    var socket : URLSessionWebSocketTask!
    
    
    init(withSocketURL url : URL){
        super.init()
        urlSession  = URLSession(configuration: .default, delegate: self, delegateQueue: operationQueue)
        socket = urlSession.webSocketTask(with: url)
    }
    
    private func addListener(){
        
        socket.receive {[weak self] (result) in
            switch result {
            case .success(let response):
                switch response {
                    
                case .data(let data):
                    self?.didReceiveData?(data)

                case .string(let message):
                    self?.didReceiveMessage?(message)
                @unknown default:
                    break
                }
            case .failure(let error):
                self?.didReceiveError?(error)
            }
            self?.addListener()

        }
    }
}

extension WebSocketConnector : WebSocketProtocol {
    
    func establishConnection(){
        socket.resume()
        addListener()
    }
    
    func disconnect(){
        socket.cancel(with: .goingAway, reason: nil)
    }
    
    
    func send(message: String) {
        socket.send(URLSessionWebSocketTask.Message.string(message)) {[weak self] (error) in
            if let error = error {
                self?.didReceiveError?(error)
            }
        }
    }
    
    func send(data: Data) {
        socket.send(URLSessionWebSocketTask.Message.data(data)) {[weak self] (error) in
            if let error = error {
                self?.didReceiveError?(error)
            }
        }
    }
    
}

extension WebSocketConnector : URLSessionWebSocketDelegate {
    
    func urlSession(_ session: URLSession, webSocketTask: URLSessionWebSocketTask, didOpenWithProtocol protocol: String?) {
        didOpenConnection?()
    }
    
    func urlSession(_ session: URLSession, webSocketTask: URLSessionWebSocketTask, didCloseWith closeCode: URLSessionWebSocketTask.CloseCode, reason: Data?) {
        didCloseConnection?()
    }
}
1

There are 1 best solutions below

0
On

Just wrap your URL with an URLRequester:

var request = URLRequest(url: url)
request.addValue("xafq", forHTTPHeaderField: "Authorization")

and call:

URLSession.shared.webSocketTask(with: request)