Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

add header to URLSessionWebSocket

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?()
    }
}
like image 836
Marc t Avatar asked Oct 24 '25 13:10

Marc t


1 Answers

Just wrap your URL with an URLRequester:

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

and call:

URLSession.shared.webSocketTask(with: request)
like image 73
Thales Frigo Avatar answered Oct 26 '25 04:10

Thales Frigo



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!