【问题标题】:erlang bind http query to ip (or interface)erlang将http查询绑定到ip(或接口)
【发布时间】:2018-04-20 02:54:42
【问题描述】:

在 nodejs 我们有 http.request(options[, callback]) 选项 localAddress (本地接口绑定网络连接。)。这工作得很好。如何在 Erlang 中实现这一点?现在我将 ibrowse 用于请求,但这不是一个约束。我想我需要看看 erlang 中的普通 http 是如何工作的,但可能有人面临这个问题。

【问题讨论】:

    标签: node.js http erlang


    【解决方案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),
    

    这只是普通的 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"),
    

    希望这些信息足以帮助您入门。

    【讨论】:

    • 感谢您的详尽解答!
    猜你喜欢
    • 2017-03-11
    • 1970-01-01
    • 2015-05-10
    • 1970-01-01
    • 2015-11-22
    • 1970-01-01
    • 1970-01-01
    • 2013-03-31
    • 2012-05-26
    相关资源
    最近更新 更多