http_server.erl 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. %%--------------------------------------------------------------------
  2. %% A Simple HTTP Server based cowboy
  3. %%
  4. %% It will deliver the http-request params to initialer process
  5. %%--------------------------------------------------------------------
  6. -module(http_server).
  7. -compile(export_all).
  8. -compile(nowarn_export_all).
  9. %%--------------------------------------------------------------------
  10. %% APIs
  11. %%--------------------------------------------------------------------
  12. start() ->
  13. {ok, _} = application:ensure_all_started(cowboy),
  14. cowboy_router:compile([
  15. {'_', [
  16. {"/", ?MODULE, self()}
  17. ]}
  18. ]).
  19. start_http() ->
  20. {ok, _Pid1} = cowboy:start_clear(http, [{port, 8080}], #{
  21. env => #{dispatch => start()}
  22. }),
  23. io:format("Start http server on 8080 successfully!~n").
  24. start_https() ->
  25. Path = emqx_ct_helpers:deps_path(emqx_web_hook, "test/emqx_web_hook_SUITE_data/"),
  26. SslOpts = [{keyfile, Path ++ "/server-key.pem"},
  27. {cacertfile, Path ++ "/ca.pem"},
  28. {certfile, Path ++ "/server-cert.pem"}],
  29. {ok, _Pid2} = cowboy:start_tls(https, [{port, 8081}] ++ SslOpts,
  30. #{env => #{dispatch => start()}}),
  31. io:format(standard_error, "Start https server on 8081 successfully!~n", []).
  32. stop_http() ->
  33. ok = cowboy:stop_listener(http),
  34. io:format("Stopped http server on 8080").
  35. stop_https() ->
  36. ok = cowboy:stop_listener(https),
  37. io:format("Stopped https server on 8081").
  38. %%--------------------------------------------------------------------
  39. %% Callbacks
  40. %%--------------------------------------------------------------------
  41. init(Req, ReceiverPid) ->
  42. Req1 = handle_request(Req, ReceiverPid),
  43. {ok, Req1, ReceiverPid}.
  44. %% @private
  45. handle_request(Req, ReceiverPid) ->
  46. Method = cowboy_req:method(Req),
  47. Headers = cowboy_req:headers(Req),
  48. Params =
  49. case Method of
  50. <<"GET">> -> cowboy_req:parse_qs(Req);
  51. <<"POST">> ->
  52. {ok, PostVals, _Req2} = cowboy_req:read_urlencoded_body(Req),
  53. PostVals
  54. end,
  55. io:format("Request Data:~p~nHeaders :~p~n", [Params, Headers]),
  56. erlang:send(ReceiverPid, {Params, Headers}),
  57. reply(Req, ok).
  58. %% @private
  59. reply(Req, ok) ->
  60. cowboy_req:reply(200, #{<<"content-type">> => <<"text/plain">>}, <<"hello">>, Req);
  61. reply(Req, error) ->
  62. cowboy_req:reply(404, #{<<"content-type">> => <<"text/plain">>}, <<"deny">>, Req).