【问题标题】:How to get status code from result in Elixir如何从 Elixir 的结果中获取状态码
【发布时间】:2015-04-22 21:38:20
【问题描述】:

我正在使用 elixir 和 httpc erlang 模块来 ping 一个网站。我可以很好地访问网站,但是当我尝试使用 status_code 时,我得到一个参数错误。我可以看到数据在错误中,但我不确定为什么会抛出错误。

我应该提供什么论据?我以为这个函数只返回一个整数,但它看起来像是在期待什么。

:inets.start
{:ok, result} = :httpc.request(:get, {'http://www.erlang.org', []}, [], [])
result.status_code()                                                               
** (ArgumentError) argument error
  :erlang.apply({'HTTP/1.1', 200, 'OK'}, :status_code, [])

【问题讨论】:

    标签: erlang elixir


    【解决方案1】:

    :httpc.request 返回包含各种信息的元组。状态码的获取方式如下。

    :inets.start
    {:ok, result} = :httpc.request(:get, {'http://www.erlang.org', []}, [], [])
    {status_line, headers, body} = result
    {http_version, status_code, reason_phrase} = status_line
    

    元组结构在 httpc 文档中的描述。 (http://erlang.org/doc/man/httpc.html#request-4)

    如果您想使用更多 elixir 风格的语法(如 result.status_code),一种选择是使用一些 elixir 库,如 httpoisonhttpotion

    【讨论】:

    • 是的,避免使用 httpc。在负载下使用时,它也有一些错误。如果您需要快速开箱即用的东西,那很好,不要将其用于实际应用。
    • 我用它对网站列表进行快速 404 测试。肯定会调查 httpoison,谢谢!
    猜你喜欢
    • 1970-01-01
    • 2016-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-12
    相关资源
    最近更新 更多