Skip to content

Commit

Permalink
add function to parse URL
Browse files Browse the repository at this point in the history
SVN Revision: 99
  • Loading branch information
nniclausse committed Nov 17, 2003
1 parent 37b6241 commit 662e232
Showing 1 changed file with 35 additions and 0 deletions.
35 changes: 35 additions & 0 deletions src/ts_http_common.erl
Expand Up @@ -32,6 +32,7 @@
http_get_ifmodsince/3,
http_post/4,
parse/2,
parse_URL/1,
protocol_headers/1
]).

Expand Down Expand Up @@ -302,3 +303,37 @@ parse_cookie(ParsedHeader) ->



% parse host
parse_URL("https://" ++ String) ->
parse_URL(host, String, [], #url{scheme=https});
parse_URL("http://" ++ String) ->
parse_URL(host, String, [], #url{scheme=http}).

%%----------------------------------------------------------------------
%% Func: parse_URL/4 (inspired by yaws_api.erl)
%% Returns: #url record
%% Purpose: parse a URL (surprise !)
%%----------------------------------------------------------------------
% parse host
parse_URL(host, [], Acc, URL) -> % no path or port
URL#url{host=lists:reverse(Acc), path= "/"};
parse_URL(host, [$/|Tail], Acc, URL) -> % path starts here
parse_URL(path, Tail, [], URL#url{host=lists:reverse(Acc)});
parse_URL(host, [$:|Tail], Acc, URL) -> % port starts here
parse_URL(port, Tail, [], URL#url{host=lists:reverse(Acc)});
parse_URL(host, [H|Tail], Acc, URL) ->
parse_URL(host, Tail, [H|Acc], URL);
% parse port
parse_URL(port,[], Acc, URL) ->
URL#url{port=list_to_integer(lists:reverse(Acc)), path= "/"};
parse_URL(port,[$/|T], Acc, URL) ->
parse_URL(path, T, "/", URL#url{port=list_to_integer(lists:reverse(Acc))});
parse_URL(port,[H|T], Acc, URL) ->
parse_URL(port, T, [H|Acc], URL);
% parse path
parse_URL(path,[], Acc, URL) ->
URL#url{path=lists:reverse(Acc)};
parse_URL(path,[$?|T], Acc, URL) ->
URL#url{path=lists:reverse(Acc), querypart=T};
parse_URL(path,[H|T], Acc, URL) ->
parse_URL(path, T, [H|Acc], URL).

0 comments on commit 662e232

Please sign in to comment.