26.01.2024 18:32 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 - 2025