顺便说一句,MIME 标头(几乎?)与 HTTP 标头相同,因此您可以使用 Erlang 内置的 HTTP 解码:(数据必须是二进制的,而不是字符串)
3> erlang:decode_packet(httph, <<"Delivered-To: xyz@geodesic.com\nReceived: by 1.gnu.geodesic.net (fdm 1.5, account \"mail\");\n\tFri, 03 Jul 2009 16:56:03 +0530\n">>, []).
{ok,{http_header,0,"Delivered-To",undefined,
"xyz@geodesic.com"},
<<"Received: by 1.gnu.geodesic.net (fdm 1.5, account \"mail\");\n\tFri, 03 Jul 2009 16:56:03 +0530\n">>}
4> Rest = element(3, v(-1)).
对,得到http_header
记录中的第一个标题,以及剩余的数据。
<<"Received: by 1.gnu.geodesic.net (fdm 1.5, account \"mail\");\n\tFri, 03 Jul 2009 16:56:03 +0530\n">>
5> erlang:decode_packet(httph, Rest, []).
{more,undefined}
但是由于解码器无法在没有看到下一行的情况下知道标题行是否在下一行继续,所以这是行不通的。我们需要添加最后的空行:
6> erlang:decode_packet(httph, <<Rest/binary, "\r\n">>, []).
{ok,{http_header,0,"Received",undefined,
"by 1.gnu.geodesic.net (fdm 1.5, account \"mail\");\n\tFri, 03 Jul 2009 16:56:03 +0530"},
<<"\r\n">>}
当剩下的就是这些时,我们得到http_eoh
:
7> erlang:decode_packet(httph, <<"\r\n">>, []).
{ok,http_eoh,<<>>}
希望对您有所帮助……</p>