在Erlang中解析二进制文件

hyp*_*ean 2 binary erlang parsing http

如果我有以下二进制文件:,如何将其拆分以便只检索host()?<<"GET http://www.google.com HTTP/1.1">>http://www.google.com

我从以下开始:

get_host(<<$G, Rest/binary>>) -> get_host(Rest);
get_host(<<$E, Rest/binary>>) -> get_host(Rest);
get_host(<<$T, Rest/binary>>) -> get_host(Rest);

但我不确定如何从这里开始.我正在考虑Rest从二进制文件的末尾开始反转并重新开始.

D.N*_*bon 10

您似乎正在尝试为HTTP 1.1实现最小解析器.这是一个遵循HTTP 1.1规范并解析http请求第一行的解决方案.在不知道您的具体情况的情况下,我会在大多数情况下建议在简化的"拆分二进制"之前使用通用的HTTP解析器.

1> erlang:decode_packet(http,<<"GET http://www.google.com HTTP/1.1\n">>,[]).  
{ok,{http_request,'GET',
              {absoluteURI,http,"www.google.com",undefined,"/"},
              {1,1}},
<<>>}
Run Code Online (Sandbox Code Playgroud)