-module(utHttpOn). %% API -export([ req/6, %% Post, Put, Delete Only req_get/3, %% Get Only url_encode/1 ]). -export([get_unique_ref/1, get_conv_ref/0]). get_conv_ref() -> get_unique_ref(20). get_unique_ref(Length) -> IntPass = random_num(36, Length), list_to_binary(lists:flatten(io_lib:format("~.36B", [IntPass]))). random_num(NumeralSystemBase, Length) -> Min = round(math:pow(NumeralSystemBase, Length - 1)), Max = round(math:pow(NumeralSystemBase, Length)), rand:uniform(Min, Max). req(Method, Url, Headers, ContType, Body, HttpOpts) when Method == post orelse Method == put orelse Method == delete -> HttpClOpts = [{sync, true}, {body_format, binary}], Resp = httpc:request(Method, {eu_types:to_list(Url), Headers, ContType, Body}, HttpOpts, HttpClOpts), minimize_resp(Resp). req_get(Url, Headers, HttpOpts) -> HttpClOpts = [{sync, true}, {body_format, binary}], Resp = httpc:request(get, {eu_types:to_list(Url), Headers}, HttpOpts, HttpClOpts), minimize_resp(Resp). minimize_resp(Resp) -> case Resp of {ok, {{_NewVrsn, 200, _}, _Headers, RespBody}} -> {ok, 200, RespBody}; {ok, {{_NewVrsn, HttpCode, _}, _Headers, RespBody}} -> {error, HttpCode, RespBody}; Any -> Any end. url_encode(Data) -> url_encode(Data, ""). url_encode([], Acc) -> Acc; url_encode([{Key, Value} | R], "") -> url_encode(R, edoc_lib:escape_uri(Key) ++ "=" ++ edoc_lib:escape_uri(Value)); url_encode([{Key, Value} | R], Acc) -> url_encode(R, Acc ++ "&" ++ edoc_lib:escape_uri(Key) ++ "=" ++ edoc_lib:escape_uri(Value)).