node.js - erlang 将 http 查询绑定(bind)到 ip(或接口(interface))

标签 node.js http erlang

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

最佳答案

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

如果我只想连接到某个远程 Host:Port,则调用如下所示:

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

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

关于node.js - erlang 将 http 查询绑定(bind)到 ip(或接口(interface)),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47162446/

相关文章:

node.js - 为什么我可以在 "res.send"之后执行代码?

node.js - 路径\"[object Object]\"处的值\"players\"转换为 ObjectId 失败

node.js - Redis SET 与 SETNX 性能对比

http - HTTP 请求未在响应中执行 - Flutter/Dart

http - 在并发应用程序中使用 HTTP 客户端的最佳方式

erlang - 在erlang receive语句中引入 'save queue'的目的是什么

用于并发编程的 .NET 语言

node.js - Electron 作为 Web 浏览器的安全影响

Http REST 调用问题 POST 上没有 'Access-Control-Allow-Origin'

php - 将 erlang 应用程序与 php 接口(interface)