Задать вопрос
Dunaevlad
@Dunaevlad

Почему приходит не полностью декодированый ответ?

EM.run do
  ws = Faye::WebSocket::Client.new(
    "wss://wss.winline.ru/data_ng?", 
    [],
    # :headers => headers, 
    :extensions => [PermessageDeflate]
  )

  ws.on :open do |event|
    p [:open]
    ws.send "lang"
    ws.send "AQ==" 
    ws.send "data" 
    ws.send "WINLINE" 
    ws.send "getdate" 
    ws.send "no_fordata" 

  end

  ws.on :message do |event|
    gz = Zlib::GzipReader.new(StringIO.new(event.data.pack('C*')))    
    puts gz.read
  end

  ws.on :close do |event|
    p [:close, event.code, event.reason]
    ws = nil
  end
end

Я получаю ответ от сокета, он декодируется, но не полностью:

�n
  Alba BerlinMitteldeutscher BC�\�4q 01:1284:6016:15 - 21:14 - 26:20 - 21:110���X�_�i
�nHamburg TowersEWE Baskets Oldenburg�\�4q 05-4479:8619:23 - 28:30 - 23:19 - 9:14/���X�_�;
�nMHP Riesen LudwigsburgRatiopharm ULM�q�1q 06-018:98:93��������
�o
CB BreoganBaskonia Vitoria-Gasteiz�\�4q 02-4072:8013:25 - 19:16 - 30:23 - 10:1��$��
e�Stal Ostrow WielkopolskiWilki Morskie Szczecin�c�3q 05-3132:445:18 - 21:23 - 6:3*g��GҕK�Chodorski, PiotrAdamiak, Grzegorz�q�c2set0:1
9:11 - 8:8y��oȕ6	�Malinowski, RadoslawKleszcz, Krzesimirlu�c0:00:0�����!r� 

���;Den Helder SunsDonar Groningen�c�3q 03:3948:6416:19 - 21:24 - 11:21$����!r��
���;andstede Basketball Zwolleasketball Academie Limburg�c�3q 04:3943:4616:18 - 20:10 - 7:18(ا��kϣ�;
                                                                                                    Cdub E-Sport5ratforcestaff�j�c1map0:0
                                                                                                                                         0:1@0@0@0@0$�������;
                                                                                                                                                             Team Spirit

т.е., что-то декодируется, а что то нет. Пока не знаю, как получать данные, которые должны быть следующего вида:

42["sb_odds_change","{\"id\":35285604,\"type\":\"match\",\"provider\":2,\"status\":1,\"timestamp\":1672170170534,\"markets\":[{\"id\":60,\"specifiers\":\"\",\"status\":0,\"provider\":2,\"meta\":{\"dataVersion\":46,\"lA\":0,\"lH\":0},\"timestamp\":1672170170534,\"outcomes\":[{\"id\":1,\"type\":\"predefined\",\"odds\":14,\"active\":false,\"state\":1},{\"id\":3,\"type\":\"predefined\",\"odds\":1.23,\"active\":false,\"state\":1},{\"id\":2,\"type\":\"predefined\",\"odds\":4.3,\"active\":false,\"state\":1}],\"state\":1,\"weight\":2},{\"id\":63,\"specifiers\":\"\",\"status\":0,\"provider\":2,\"meta\":{\"dataVersion\":46,\"lA\":0,\"lH\":0},\"timestamp\":1672170170534,\"outcomes\":[{\"id\":9,\"type\":\"predefined\",\"odds\":3.75,\"active\":false,\"state\":1}"]
  • Вопрос задан
  • 90 просмотров
Подписаться 2 Средний Комментировать
Решения вопроса 1
2ord
@2ord
Похоже, что поток Gzip декодируется без проблем. Там внутри просто бинарные данные, которые надо уметь десериализовать и map-ить на внутренние структуры данных. Для этого нужно проводить реверс-инжениринг или читать документацию у автора данных.

Получаем такие данные
[:open]
I, [2022-12-31T13:01:18.377633 #12831] INFO -- : ==> message size 135
"y\x00\x00\x01\x87\x00\x01\x00c\x00\x05\x17\x0E\x01\xF4\x01\x02,\x01\x03,\x01\x04\xC8\x00\x05d\x00\x062\x00\a,\x01\b2\x00\t\x1E\x00\n\x14\x00\v\n\x00\f\x00\x00\r\x00\x00\x0E\x00\x00\x03\x01\x00\x04\x00\x00\x00\x02\x01\x00\x04\x00\a\x01\xEA\x01\xEA\x01\x02\x19\x04\x19\x04\x03\x10\x00\x10\x00\x04\xB1\x03\xB1\x03\x05:\x00N\x04\x06\x00\x00\x12\x04\a"
I, [2022-12-31T13:01:18.378144 #12831] INFO -- : ==> message size 1511
"\x8A\x04\x01\x03\r\xD6\x00\x00\x00\x01\xD6\x00\x00\x00\x87\x13\x91\x00\x80\\\xB0c\x12\x00\u0411\u0430\u0440\u0441\u0435\u043B\u043E\u043D\u0430\x10\x00\u042D\u0441\u043F\u0430\u043D\u044C\u043E\u043B\x01\v\x00\x00\xFE\n\x00\x00\x03\x04\x00\x00\x00\x00\x00\x00\x00\x00\xFE\xB4\x92\x00\xA0x\xB0c\e\x00\u041C\u0430\u043D\u0447\u0435\u0441\u0442\u0435\u0440 \u0421\u0438\u0442\u0438\x0E\x00\u042D\u0432\u0435\u0440\u0442\u043E\u043D\x11\x00\x00\x000"
I, [2022-12-31T13:01:18.378693 #12831] INFO -- : ==> message size 3004
"\x9C\x04&g\x00\x00\x02\x00\x007\x00https://winline.ru/resources/images/app_topbar/..."
I, [2022-12-31T13:01:18.453962 #12831] INFO -- : ==> message size 24931
"\x10\x00e\x00\x00\x004\x00\x00\x00c\x00\x00\x00\x00\x00\x02\x00RT\b\x00FullTime\v\x00RegularTime\b\x00HalfTime\x06\x00Period\b\x00OverTime\a\x00Penalty\x01\x00Z\x01\x00W@\x00\x00\x00c\x00\x00\x00\x00\x00\x02\x00R"
I, [2022-12-31T13:01:18.848721 #12831] INFO -- : ==> message size 198262
"\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01L\x01\x00\x00\x00\x00\x00\x00\b\x00Bulgaria\x17\x00\x00\x00\x01\a\x00\x02\x00\x00\x01C\x00\x00\x00\x00\x00\x00\x00\x06\x00Greece\x0F'\x00\x00\x01\v\x00\x05\x00\x00\x01n\x01\x00\x00\x00\x00\x00\x00\a\x00Vietnam\x0F'\x00\x00\x02\x03\x00"
I, [2022-12-31T13:01:18.860996 #12831] INFO -- : ==> message size 22
"\a\x00"
I, [2022-12-31T13:01:18.861229 #12831] INFO -- : ==> message size 786
"\x9D\x04e\x00\x00\x00\x9A\x96\x01\x00\x18\x00\x00\x00\xE0\xFD\x80d\x11\x00\x00\x00\b\x00\x00\x00\x10\x90\xFBc\x8D\xD6\x00\x00\b\x00\x00\x00\x90?\x17d\f\x00\x00\x00}\x00\x00\x00P\xFB|d\x10\x01\x00\x00\x12\x00\x00\x00PY\x97d\\\x04\x00\x00\n\x00\x00\x00\xD0cvd^\xD6\x00\x00\x1C\x00\x00\x00\xA0\x80\x98d\x97 \x00\x00&\x00\x00\x00\xF0"
I, [2022-12-31T13:01:18.861596 #12831] INFO -- : ==> message size 6961
"\x04\x00\x0F\x00\x00\x00\x18\x00\x00\x00\a\x02\x00\x00\x02V\x00\x00\x00\x01\x00\x00\x00\n\x00\x00\x00\x89\x01\x00\x00\x00\x13\x00Club Friendly Games\x02\n\x00\x00\x00\x0F'\x00\x00\x02\x1C\x10\x00\x00\x02\x00\x00\x00@B\x0F\x00p\x00\x00\x00\x00\x10\x00Super Lig, Women\x02"
I, [2022-12-31T13:01:19.087934 #12831] INFO -- : ==> message size 9567
"\x04\x00\x13\x00\x00\x00#\x00\x00\x00\xD6\x02\x00\x00\x02S\x02\x00\x00\x02\x00\x00\x00@B\x0F\x00p\x00\x00\x00\x00\x04\x00TBSL\x02\x01\x00\x00\x00\x00\x00\x00\x00\x02\xD7\x02\x00\x00\x02\x00\x00\x00@B\x0F\x00q\x00\x00\x00\x00\x03\x00NBL\x02\x0F'\x00\x00\x0F'\x00\x00\x02[\x03\x00\x00\x02\x00\x00\x00@B\x0F\x00q\x00\x00\x00\x00\x04\x00"
I, [2022-12-31T13:01:19.089121 #12831] INFO -- : ==> message size 22
"3\x00"
I, [2022-12-31T13:01:19.380693 #12831] INFO -- : ==> message size 43
",\x00l\x00\x00\x00\x0F\x00149.106.242.182"
^C[:close, 1006, ""]
В некоторых сообщениях есть общие заголовки данных, например, "\x04\x00".

чуток модифицированный код

require 'faye/websocket'
require 'eventmachine'
require 'permessage_deflate'

require 'logger'
LOGGER = Logger.new($stdout)

def dump_data(data, limit = 100)
  # puts data.unpack('H*')
  puts data[0, limit-1].dump
end

EM.run do
  ws = Faye::WebSocket::Client.new(
    "wss://wss.winline.ru/data_ng?", 
    [],
    # :headers => headers, 
    :extensions => [PermessageDeflate]
  )

  ws.on :open do |event|
    p [:open]
    ws.send "lang"
    ws.send "AQ==" 
    ws.send "data" 
    ws.send "WINLINE" 
    ws.send "getdate" 
    ws.send "no_fordata" 

  end

  ws.on :message do |event|
    LOGGER.info "==> message size #{event.data.length}"
    gz = Zlib::GzipReader.new(StringIO.new(event.data.pack('C*')))    
    dump_data(gz.read)
    gz.close
  end

  ws.on :close do |event|
    p [:close, event.code, event.reason]
    ws = nil
  end
end
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы