Erlang звертається до іншого локального вебсервера за даними.
Файл service.erl
Erlang
-module(service). -export([ about/3 ]). -define(WEBHOST, "http://localhost:8082/"). about(SessionID, Env, _Input) -> get_request(SessionID, Env, "about", "text/html"). % Вибірка даних метод GET get_request(SessionID, Env, Service, ContentType) -> check_allow_host(Env), QueryString = query_string(Env), PathInfo = path_info(Env), Request = {?WEBHOST ++ Service ++ QueryString ++ PathInfo, []}, {R, Result} = httpc:request(get, Request, [], []), if R =:= ok -> {{_Protocol, Code, _Info}, _Headers, Body} = Result, if Code =:= 200 -> mod_esi:deliver(SessionID, [ "Content-Type:" ++ ContentType, "\r\n\r\n", io_lib:format("~s~n", [Body]) ]); true -> % У всіх інших випадках на початкову сторінку mod_esi:deliver(SessionID, ["Location: /", "\r\n\r\n"]) end; true -> % У випадку помилки перенаправити на сторінку що сервіс тимчасово не працює mod_esi:deliver(SessionID, ["Location: /", "\r\n\r\n"]) end. % Відправлення даних методом POST post_request(SessionID, Env, Service, ContentType, Input) -> check_allow_host(Env), Request = {?WEBHOST ++ Service, [], "application/x-www-form-urlencoded", Input}, {R, Result} = httpc:request(post, Request, [], []), if R =:= ok -> {{_Protocol, Code, _Info}, _Headers, Body} = Result, if Code =:= 200 -> mod_esi:deliver(SessionID, [ "Content-Type:" ++ ContentType, "\r\n\r\n", io_lib:format("~s~n", [Body]) ]); true -> % У всіх інших випадках на початкову сторінку mod_esi:deliver(SessionID, ["Location: /", "\r\n\r\n"]) end; true -> % У випадку помилки перенаправити на сторінку що сервіс тимчасово не працює mod_esi:deliver(SessionID, ["Location: /", "\r\n\r\n"]) end. path_info([]) -> ""; path_info([{Key, Value} | Env]) -> if Key =:= 'path_info' -> "/" ++ Value; true -> path_info(Env) end. query_string([]) -> ""; query_string([{Key, Value} | Env]) -> if Key =:= 'query_string' -> "?" ++ Value; true -> query_string(Env) end.
© accounting.org.ua - 2024