拆分时 gen_tcp recv 中的错误参数

bad argument in gen_tcp recv when split

您好,我正在阅读一个我想获取路径的请求,但是当我 运行 此代码

    {:ok, line} = :gen_tcp.recv(socket, 0)
    IO.inspect "************************* #{ inspect line} "

    [_server_name, verb, info_path, _version] = String.split(line)

4 个参数的 inspect 看起来没问题

    {:http_request, :GET, {:abs_path, \"/gg\"}, {1, 1}}

错误说:

{badarg,[{binary,split,
                 [{http_request,'GET',{abs_path,<<"/gg">>},{1,1}},
                  [<<227,128,128>>,
                   <<226,129,159>>,
                   <<226,128,169>>,
                   <<226,128,168>>,
                   <<226,128,128>>,
                   <<226,128,129>>,
                   <<226,128,130>>,
                   <<226,128,131>>,
                   <<226,128,132>>,
                   <<226,128,133>>,
                   <<226,128,134>>,
                   <<226,128,136>>,
                   <<226,128,137>>,
                   <<226,128,138>>,
                   <<225,154,128>>,
                   <<194,133>>,
                   <<" ">>,<<"\t">>,<<"\n">>,<<"\v">>,<<"\f">>,<<"\r">>],
                  [global,trim_all]],
                 []},

我不知道该行的那些额外参数是什么。

如果我尝试只将线与每种类型绑定,而不会收到我收到的拆分

    [_server_name, verb, info_path, _version] = line


{{badmatch,{http_request,'GET',{abs_path,<<"/gg">>},{1,1}}},

如果我读回 :gen_tcp.recv correctly, you "should" receive a HttpPacket 的文档,在您的情况下似乎是 HttpRequest。由于请求的解析是为你处理的,你 "should" 可以简单地做:

{:ok, line} = :gen_tcp.recv(socket, 0)
{_server_name, verb, info_path, _version} = line

注意: HttpRepuest 使用 {...} 花括号而不是 [...] 括号。