Я бы порекомендовал erlang:decode_packet
для этого, но чтобы показать, как это можно сделать, вот пара функций, которая удаляет ведущий "GET "
, а затем возвращает все до первого пробела (но вылетает, если нет пространство).
get_host(<<"GET ", Rest/binary>>) ->
get_host2(Rest, <<>>).
get_host2(<<" ", _/binary>>, Acc) ->
Acc;
get_host2(<<C, Rest/binary>>, Acc) ->
get_host2(Rest, <<Acc/binary, C>>).
По сути, я помещаю каждый байт, который не является пробелом, в мой «аккумулятор», и когда я нахожу это место, я возвращаю свой аккумулятор. Это распространенный прием, который чаще всего встречается в списках. (Со списками вы захотите поместить новые элементы в перед списка и полностью изменить список в конце, чтобы избежать превращения алгоритма O (N) в O (N²), но это не нужно для двоичных файлов.)