Ошибка подключения SSL-сокетов по протоколу CRLF json - PullRequest
0 голосов
/ 27 апреля 2020

Я пытаюсь подключиться к сокету (ssl), используя https://github.com/meh/elixir-socket

Socket.Web.connect! "stream-api.betfair.com", secure: true

Но я сталкиваюсь с этой ошибкой:

** (MatchError) no match of right hand side value: {:http_error, "{\"op\":\"connection\",\"connectionId\":\"203-270420013200-944388\"}\r\n"}
    (socket 0.3.13) lib/socket/web.ex:251: Socket.Web.connect!/3

Но это не ошибка. Сервер принимает мое соединение, но elixir-socket возвращает ошибку. Так что не так?

1 Ответ

1 голос
/ 27 апреля 2020

Ошибка, о которой идет речь, здесь , что означает, что Socket.Stream.recv!/2 вернулось несколько неожиданно.

Это делегировано Socket.Stream.Protocol.

В зависимости от того, используете ли вы ssl или нет, оно происходит от здесь или от здесь .

Эта библиотека древняя и AFAICT очень строгая. Единственный способ продвинуться на go, который я могу придумать, - это раскошелиться, изучить ответы, которые, как вы ожидаете, будут правильными, изменить обработку Socket.Stream.recv!/2 на что-то, отвечающее вашим требованиям:

response =
  case Socket.Stream.recv!(client, global) do
    {:http_response, _, 101, _} -> :ok
    {:http_error, _json} -> :ok
    _ -> :error
  end

И с этим обращаться соответственно. Почему ваш сервер отвечает таким странным образом, здесь выходит за рамки.

...