-module(hex_http_httpc). -behaviour(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), {ok, {{_, StatusCode, _}, RespHeaders, RespBody}} = httpc:request(Method, Request, [], [{body_format, binary}], Profile), RespHeaders2 = load_headers(RespHeaders), {ok, {StatusCode, RespHeaders2, RespBody}}. %%==================================================================== %% Internal functions %%==================================================================== build_request(URI, ReqHeaders, Body) -> build_request2(binary_to_list(URI), dump_headers(ReqHeaders), Body). build_request2(URI, ReqHeaders, nil) -> {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).