1

Erlang Programming一书中,建议的练习之一是在屏幕上打印来自浏览器的请求,使用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 请求的情况下如何做到这一点。你能提供一个非常简单的例子,或者给我指点书籍或网上的一些资源吗?

4

2 回答 2

3

这是 Erlang SSL 应用程序的用户指南: Erlang -- SSL 用户指南

该指南还在 API 章节中包含有关更新现有 SSL 连接的段落。

关于您的代码,您应该执行以下操作:

  • 在服务器和客户端,您必须发出: ssl:start()
  • 服务器端:握手 SSL(请记住将侦听套接字的“活动”设置为 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").

希望这可以帮助!

于 2011-07-25T11:08:26.407 回答
1

我建议阅读以下有关 Erang 中 SSL 套接字的文章,其中包含 SSL 回显服务器和客户端的完整代码。

Erlang SSL 套接字示例 - ssl 服务器和客户端)

于 2012-06-03T22:10:17.003 回答