|
%% Vendored from hex_core v0.7.0, do not edit manually
|
|
|
|
%% @hidden
|
|
|
|
-module(r3_hex_http_httpc).
|
|
-behaviour(r3_hex_http).
|
|
-export([request/5]).
|
|
|
|
%%====================================================================
|
|
%% API functions
|
|
%%====================================================================
|
|
|
|
request(Method, URI, ReqHeaders, Body, AdapterConfig) ->
|
|
Profile = maps:get(profile, AdapterConfig, default),
|
|
Request = build_request(URI, ReqHeaders, Body),
|
|
case httpc:request(Method, Request, [], [{body_format, binary}], Profile) of
|
|
{ok, {{_, StatusCode, _}, RespHeaders, RespBody}} ->
|
|
RespHeaders2 = load_headers(RespHeaders),
|
|
{ok, {StatusCode, RespHeaders2, RespBody}};
|
|
{error, Reason} -> {error, Reason}
|
|
end.
|
|
|
|
%%====================================================================
|
|
%% Internal functions
|
|
%%====================================================================
|
|
|
|
build_request(URI, ReqHeaders, Body) ->
|
|
build_request2(binary_to_list(URI), dump_headers(ReqHeaders), Body).
|
|
|
|
build_request2(URI, ReqHeaders, undefined) ->
|
|
{URI, ReqHeaders};
|
|
build_request2(URI, ReqHeaders, {ContentType, Body}) ->
|
|
{URI, ReqHeaders, ContentType, Body}.
|
|
|
|
dump_headers(Map) ->
|
|
maps:fold(fun(K, V, Acc) ->
|
|
[{binary_to_list(K), binary_to_list(V)} | Acc] end, [], Map).
|
|
|
|
load_headers(List) ->
|
|
lists:foldl(fun({K, V}, Acc) ->
|
|
maps:put(list_to_binary(K), list_to_binary(V), Acc) end, #{}, List).
|