【问题标题】:Error to connect ssl sockets with a CRLF json protocol使用 CRLF json 协议连接 ssl 套接字时出错
【发布时间】:2020-08-10 12:16:35
【问题描述】:

我正在尝试使用 https://github.com/meh/elixir-socket 连接到套接字 (ssl)

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 返回错误。那么有什么问题呢?

【问题讨论】:

    标签: sockets erlang elixir


    【解决方案1】:

    有问题的错误发生在here,这意味着Socket.Stream.recv!/2 的返回有些出乎意料。

    delegatedSocket.Stream.Protocol

    根据你是否使用ssl,它来自herehere

    这个图书馆很古老,而且 AFAICT 非常严格。我能想到的更进一步的唯一方法是将它分叉,检查您期望正确的响应,将 handling of Socket.Stream.recv!/2 修改为符合您要求的内容:

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

    并相应地处理它。为什么你的服务器以如此奇怪的方式响应,这里不在讨论范围内。

    【讨论】:

    • 我不知道“为我工作”在这种情况下应该是什么意思。
    • 我只想连接,但我测试过的库都没有连接
    • here 是问题所在。:ssl.recv 返回{:ok, {:http_error, "{\"op\":\"connection\",\"connectionId\":\"204-280420165409-1131618\"}\r\n"} }
    • 我在上面的答案中指出了问题所在。您正在查看非 banged 版本,banged 版本将返回 {:ok, _} 元组内的值。服务器响应类似{:ok, {:http_error, json}}
    • 但是是什么导致了这个http_error?里面有一个“成功”的消息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-27
    • 2016-03-09
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    • 2013-02-04
    • 2021-05-04
    相关资源
    最近更新 更多