erlang各种有用的函数包括一些有用nif封装,还有一些性能测试case。
No puede seleccionar más de 25 temas Los temas deben comenzar con una letra o número, pueden incluir guiones ('-') y pueden tener hasta 35 caracteres de largo.
 
 
 
 
 
 

52 líneas
1.6 KiB

-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)).