erlang将http查询绑定到ip(或接口)

时间:2017-11-07 16:07:35

标签: node.js http erlang

在nodejs中,我们有http.request(options [,callback]),带有选项localAddress(用于绑定网络连接的本地接口)。这工作得很好。我如何在Erlang中实现它?现在我使用ibrowse进行请求,但这不是约束。我想我需要看看erlang中的简单http是如何工作的,但可能是某个人面临这种​​情况。

1 个答案:

答案 0 :(得分:1)

Erlang中的基本TCP为gen_tcp:connect/3,4提供了一个选项,您可以在其中声明特定接口(或套接字类型以及其他一些内容)。

如果我只想连接到某个远程主机:端口,则呼叫如下:

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

如果我希望连接的本地端来自特定地址(在这台机器上192.168.5.23是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),

那只是vanilla TCP。在Erlang中编写HTTP / 1.1客户端非常简单,取决于您想要做什么可能是理想的。

还有一个名为httpc的内置http客户端(还有一些其他功能更强大/更干净的客户端,如gunhackney)。这些全部make requests使用与gen_tcp类似的参数,包括相同connect options的可用性以及非常简单易用的特殊httpc:set_options/1,2

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

希望这足以让您入门。