@@ -111,7 +111,8 @@ public ClientWebSocket(ClientWebSocketOptions options = null) : base(options)
111111 /// Connect to a WebSocket server.
112112 /// </summary>
113113 /// <param name="uri">The URI of the WebSocket server to connect to.</param>
114- public void Connect ( string uri )
114+ /// <param name="headers">Optional <see cref="ClientWebSocketHeaders"/> for setting custom headers.</param>
115+ public void Connect ( string uri , ClientWebSocketHeaders headers = null )
115116 {
116117 State = WebSocketFrame . WebSocketState . Connecting ;
117118
@@ -195,7 +196,7 @@ public void Connect(string uri)
195196 _networkStream = new NetworkStream ( _tcpSocket , true ) ;
196197 }
197198
198- WebSocketClientConnect ( ep , prefix , Host ) ;
199+ WebSocketClientConnect ( ep , prefix , Host , headers ) ;
199200 }
200201 catch ( SocketException ex )
201202 {
@@ -212,15 +213,27 @@ private void WebSocket_ConnectionClosed(object sender, EventArgs e)
212213 _tcpSocket . Close ( ) ;
213214 }
214215
215- private void WebSocketClientConnect ( IPEndPoint remoteEndPoint , string prefix = "/" , string host = null )
216+ private void WebSocketClientConnect ( IPEndPoint remoteEndPoint , string prefix = "/" , string host = null , ClientWebSocketHeaders customHeaders = null )
216217 {
218+ string customHeaderString = string . Empty ;
219+ if ( customHeaders != null )
220+ {
221+ var headerKeys = customHeaders . Keys ;
222+ foreach ( string key in headerKeys )
223+ {
224+ if ( ! string . IsNullOrEmpty ( key ) )
225+ {
226+ customHeaderString += $ "{ key } : { customHeaders [ key ] } \r \n ";
227+ }
228+ }
229+ }
217230 if ( prefix [ 0 ] != '/' ) throw new Exception ( "websocket prefix has to start with '/'" ) ;
218231
219232 byte [ ] keyBuf = new byte [ 16 ] ;
220233 new Random ( ) . NextBytes ( keyBuf ) ;
221234 string swk = Convert . ToBase64String ( keyBuf ) ;
222235
223- byte [ ] sendBuffer = Encoding . UTF8 . GetBytes ( $ "GET { prefix } HTTP/1.1\r \n Host: { ( host != null ? host : remoteEndPoint . Address . ToString ( ) ) } \r \n Upgrade: websocket\r \n Connection: Upgrade\r \n Sec-WebSocket-Key: { swk } \r \n Sec-WebSocket-Version: 13\r \n \r \n ") ;
236+ byte [ ] sendBuffer = Encoding . UTF8 . GetBytes ( $ "GET { prefix } HTTP/1.1\r \n Host: { ( host != null ? host : remoteEndPoint . Address . ToString ( ) ) } \r \n Upgrade: websocket\r \n Connection: Upgrade\r \n Sec-WebSocket-Key: { swk } \r \n Sec-WebSocket-Version: 13\r \n { customHeaderString } \r \n ") ;
224237 _networkStream . Write ( sendBuffer , 0 , sendBuffer . Length ) ;
225238
226239 string beginHeader = ( $ "HTTP/1.1 101". ToLower ( ) ) ;
0 commit comments