12

我对 elixir 很陌生,没有 erlang 经验(或 func-y 的东西),但这很快就会变得明显..->

iex(2)> :inets.start()
:ok
iex(3)> :httpc.request(["http://www.erlang.org"])
{:error, :no_scheme}

我不知道 :no_scheme 是什么意思。我用谷歌搜索了 no_scheme 之类的东西,我确信这很明显,但我真的什么也没找到。我可以在 erlang 文档中找到的唯一模糊相关的东西是 ->

iex(4)> :http_uri.scheme_defaults
[http: 80, https: 443, ftp: 21, ssh: 22, sftp: 22, tftp: 69]

或者也许我不符合 RFC2616 或其他什么......我没有想法(现在)。

Elixir 和 Erlang 非常棒,但如果能帮助我推进我的旅程,我将不胜感激。

谢谢你的帮助!

我在erl中试过了。

1> inets:start().
ok
2> httpc:request("http://www.erlang.org").
{ok,{{"HTTP/1.1",200,"OK"},
     [{"date","Wed, 20 Nov 2013 23:15:45 GMT"},
      {"server","inets/5.7.1"},
      {"content-length","10385"},
      {"content-type","text/html; charset=utf-8"},
      {"set-cookie",
       "eptic_cookie=erlangorg@hades-3680318586833850369; path=/"}],
        "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE htm
    etc...

编辑:

好的,我最大的问题是我"http://www.erlang.org"对字符串进行了双引号,我猜 elixir -> erlang 将它们像 parrotys answer 一样单引号'http://www.erlang.org'

no_scheme 仍然很神秘。我能找到的只是与重定向和 RFC 实现有关的东西。我刚刚决定将其视为一般错误,与网址有关。

编辑2:

有人在这里发表了一篇博客文章,对此进行了很好的解释。关联

像数据库这样的 Erlang 原子变成 :database,像 Erlang 版本中的 PgConn 这样的局部变量在 Elixir 中变成 pg_conn。

当字符串字面量是 Erlang 函数的参数时,我们需要用单引号引起来。如果您将 UTF-8 字符串存储在 Elixir 变量中,则可以使用 binary_to_list/1 函数将其转换为字符列表。

编辑3:

具有讽刺意味的是,几个小时前发布的名为“HTTP 客户端”的最新 Elixir Sip 涵盖了我的整个问题。看看任何遇到这就是未来的人!

4

3 回答 3

20

以下情况如何?

:inets.start
:httpc.request(:get, {'http://www.erlang.org', []}, [], [])
于 2013-11-21T03:46:30.977 回答
12

""在 erlang 中是字符列表,而在 elixir 中是''""在 elixir 中是binary

你可以 :httpc.request('http://www.erlang.org')很快使用

于 2014-11-26T07:49:12.050 回答
12

对于https请求,还有一个额外的步骤——需要 SSL:

> :inets.start
> :ssl.start
> :httpc.request ‘https://elixir-lang.org'

请注意较短的请求格式。

我正在使用 IEx 1.7.3(使用 Erlang/OTP 21 编译)。

于 2018-09-26T01:11:25.057 回答