2017-11-07 4 views
1

nodejにはオプションlocalAddress(ネットワーク接続用にバインドするローカルインターフェイス)を持つhttp.request(options [、callback])があります。これはかなりうまくいっています。 Erlangでこれをどのように実装できますか?今私は要求にibrowseを使用しますが、これは制約ではありません。私はerlangのプレーンなhttpがどのように動作するのかを知る必要があると思うが、これに直面しているかもしれない。erlangはip(またはインターフェイス)にhttpクエリをバインドします

答えて

1

Erlangの基本TCPには、特定のインターフェイス(またはソケットタイプなど)を宣言できるgen_tcp:connect/3,4のオプションが用意されています。

私はいくつかのリモートホストに接続する場合:私は、接続のローカル側は、このマシンの192.168.5.23上の特定のアドレス(から発信したい場合は

{ok, Socket} = gen_tcp:connect(Host, Port, []) 

:ポートコールは次のようになります私にできることwlan0、192.168.7.67は、例えば、eth0のですが)です:

{ok, Socket} = gen_tcp:connect(Host, Port, [{ifaddr, {192,168,5,23}}]) 

私は特定のポートから接続したい場合、私はポートオプションを追加します。

Options = [{ifaddr, {192, 168, 5, 23}}, {port, 11311}], 
{ok, Socket} = gen_tcp:connect(Host, Port, Options), 

これは単なるバニラのTCPです。 ErlangにHTTP/1.1クライアントを書くのはかなり簡単で、何をしたいかによっては理想的かもしれません。

httpcと呼ばれるビルトインのHTTPクライアントもあります(gunhackneyのように、もう少し機能的で清潔なものもあります)。同様の議論を使用して、これらはすべてmake requests同じconnect optionsと同様に使用する非常に簡単です特別httpc:set_options/1,2の利用可能性を含め、gen_tcpします

ok = inets:start(), 
ok = httpc:set_options([{ip, {192, 168, 5, 23}}, {port, 11311}]), 
{ok, Response} = httpc:request("http://zxq9.com/archives/1311"), 

うまくいけば、これはあなたが始めるために十分な情報があります。

+0

徹底的な回答ありがとうございます! –

関連する問題