使用Elixir的:httpc erlang模块

Wil*_*lll 9 elixir

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

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

我不知道是什么:no_scheme意味着什么.我用谷歌搜索了no_scheme和东西,我确信它很明显,但我没有发现任何真的.我在erlang文档中找到的唯一模糊相关的东西是 - >

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

或者我可能不符合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...
Run Code Online (Sandbox Code Playgroud)

编辑:

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

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

编辑2:

这里有一篇博客文章,有人解释得很好.链接

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

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

编辑3:

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

par*_*oty 17

以下是怎样的?

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


fai*_*rjm 9

""在erlang是char列表而在elixir是''(""在elixir中binary)

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


pob*_*pob 5

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

> :inets.start
> :ssl.start
> :httpc.request ‘https://elixir-lang.org'
Run Code Online (Sandbox Code Playgroud)

请注意较短的请求格式。

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