Estoy tratando de conectarme a un websocket. Me gustaría agregar cookies del inicio de sesión real del sitio web, para que el servidor (que NO es mío), sepa quién soy (los eventos son específicos de la cuenta).
var opts = { extraHeaders: { 'Cookie': "_ga=GA1.2.17432343994.1475611967; _gat=1; __cfduid=dc232334gwdsd23434542342342342475611928" }, } function socket() { var socket = io(websiteURL, opts); var patch = require('socketio-wildcard')(io.Manager); patch(socket); socket.on('connect', function () { console.log(" > [Connected]"); }); socket.on('*', function (data) { console.log(" >>> " + data); }); socket.on('disconnect', function () { console.log(" > [Disconnected]"); }); }La conexión en sí funciona bien, ya que estoy recibiendo los eventos públicos del sitio web (no por cuenta).
Traté de encontrar el problema usando el inspector de nodos.
Esta es la primera petición que se está haciendo. Parece que los encabezados de solicitud están vacíos y faltan las cookies.
Uso normal del sitio web en Chrome: 
(Sí, estoy enviando menos cookies en el nodo, solo para ver si aparecen en las cookies de solicitud)
¿Estoy haciendo algo mal? ¿Cómo agregaría cookies de la manera correcta?
Tuve un problema similar, creo que sus opciones tienen que configurar la cookie para el método de transporte de "sondeo", así:
var opts = { transportOptions: { polling: { extraHeaders: { 'Cookie': '_ga=GA1.2.17432343994.1475611967; _gat=1; __cfduid=dc232334gwdsd23434542342342342475611928' } } } }Conseguí que esto funcionara con el siguiente ejemplo de servidor-cliente todo en uno:
const express = require('express'); const http = require('http'); const app = express(); const httpServer = new http.Server(app); const socketServer = require('socket.io')(httpServer); const LISTEN_PORT = 4444; socketServer.on('connection', socket => { const cookieString = socket.handshake.headers.cookie; console.log('server connection ' + (cookieString || '')); setInterval(() => socket.emit('ping', Date.now()), 1000); }); let socketClient = undefined; httpServer.listen(LISTEN_PORT, 'localhost', () => { console.log('web server started') const options = { transportOptions: { polling: { extraHeaders: { 'Cookie': 'hello=world' } } } } socketClient = require('socket.io-client').connect('http://localhost:'+LISTEN_PORT, options); socketClient.on('ping', (data) => console.log('ping ' + data)); });Socket.io agregó recientemente una opción extraHeaders al cliente:
Client(url, { extraHeaders: { Cookie: `CookieName=CookieValue;`, }, })