2011-07-25 72 views
0

在「Erlang編程」一書中提出的練習之一是在屏幕上使用gen_tcp在瀏覽器上打印請求。我做了http請求如下:尋找一個簡單的ssl erlang示例

-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

你可以發佈HTTP版本的一些代碼嗎? –

回答

3

這裏是Erlang的SSL應用程序的用戶指南: Erlang -- SSL User Guide

該指南也包含在API章節,在更新到SSL現有連接一個段落。

關於你的代碼,你應該這樣做:

  • 在服務器和客戶端,你必須發出: ssl:start()
  • 服務器端:握手SSL(記得設置「主動」爲假對於監聽套接字)

    {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").

希望這有助於!

+0

事實上,我試過這樣的事情,但問題是,我無法控制瀏覽器正在做什麼... – user601836

+0

對不起,@ user601836,但我不明白的要求:你需要整合SSL通話在Http接口? AFAIK,使用上面的方法,您應該簡單地將對象轉移到您將請求從Socket分派到SSLSocket。 –

相關問題