在“Erlang编程”一书中提出的一个练习是在屏幕上使用gen_tcp打印来自浏览器的请求。我为http请求做了如下:
-module(tcp).
-export([server/0, wait_connect/2]).
server() ->
{ok, ListenSocket} = gen_tcp:listen(1234, [binary, {active, false}]),
wait_connect(ListenSocket,0).
wait_connect(ListenSocket, Count) ->
{ok, Socket} = gen_tcp:accept(ListenSocket),
spawn(?MODULE, wait_connect, [ListenSocket, Count+1]),
get_request(Socket, [], Count).
get_request(Socket, BinaryList, Count) ->
Request = gen_tcp:recv(Socket, 0),
io:format("~p~n", [Request]).
现在我想知道在https请求的情况下如何做到这一点。
你能提供一个非常简单的例子吗?还是指点书籍或网上的资源?
非常感谢
答案 0 :(得分:3)
以下是Erlang SSL应用程序的用户指南: Erlang -- SSL User Guide
该指南还在API章节中包含有关更新现有SSL连接的段落。
关于您的代码,您应该执行以下操作:
ssl:start()
服务器端:握手SSL(记得将侦听套接字的'active'设置为false)
{ok, SSLSocket} = ssl:ssl_accept(Socket, [{cacertfile, "cacerts.pem"},
{certfile, "cert.pem"}, {keyfile, "key.pem"}]).
其中“cacerts.pem”,“cert.pem”,“key.pem”是与SSL认证相关的文件
客户端:升级到SSL的连接:
{ok, SSLSocket} = ssl:connect(Socket, [{cacertfile, "cacerts.pem"},
{certfile, "cert.pem"}, {keyfile, "key.pem"}], infinity).
根据文档,现在SSLSocket是一个ssl通道,可用于发送如下消息:
ssl:send(SSLSocket, "foo").
希望这有帮助!
答案 1 :(得分:1)
我建议阅读以下有关Erang中SSL套接字的文章,其中包含SSL echo服务器和客户端的完整代码。