使用Elixir的:httpc erlang模块

时间:2013-11-20 22:28:17

标签: elixir

我对elixir很新,没有erlang经验(或功能性的东西),但很快就会变得明显.. - >

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 - &gt; erlang将它们作为单引号引用,如parrotys回答'http://www.erlang.org'

no_scheme仍然非常神秘。我能找到的只是与重定向和RFC实现相关的东西。我刚刚决定将它视为一般错误,与url有关..

编辑2:

这里有一篇博客文章,有人解释得很好。 Link

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

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

编辑3:

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

3 个答案:

答案 0 :(得分:14)

以下是怎样的?

:inets.start
:httpc.request(:get, {'http://www.erlang.org', []}, [], [])

答案 1 :(得分:7)

erlang中的

""是char列表,​​而elixir中的''""(elixir中的binary:httpc.request('http://www.erlang.org')

您可以很快使用{{1}}

答案 2 :(得分:3)

对于 https 请求,还有一个附加步骤-需要SSL:

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

请注意较短的请求格式。

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