【问题标题】:Can the port be specified for localhost using HTTPoison?可以使用 HTTPoison 为 localhost 指定端口吗?
【发布时间】:2017-11-13 17:11:00
【问题描述】:

我正在做一个测试,我需要在本地运行一个服务。该服务是一个公开了 JSON api 的 rails 应用程序。它在 3000 端口上运行。当我执行这个 elixir 代码时,我得到一个错误:

json_event = <some valid json built earlier>
my_url = "http://localhost:3000/api/service_call"
response = HTTPoison.post(my_url, json_event)

我得到的错误是:

{:error, %HTTPoison.Error{id: nil, reason: :econnrefused}}

我应该注意,当我执行该代码时,服务日志中没有找到输出。

我的问题是可以指定端口吗?如果可以,我是否通过简单地将其构建到 url 中正确地做到了这一点?

我猜一个后续问题可能是我得到这个 :econnrefused 错误的原因是什么?

我什至不确定我在问正确的问题:P

谢谢

【问题讨论】:

  • 此代码是否在存在所述 localhost 服务的同一台服务器上运行?网址看起来不错。
  • 确实是 :) 我还应该澄清一下我是从 ExUnit 测试中运行它
  • 您的 Elixir 代码看起来不错。 econnrefused 表示您的 rails 服务器没有启动。如果需要,请使用 curl 命令仔细检查您的 Rails 服务器。
  • 好的,我会沿着这条路走。谢谢
  • 好的,我可以通过 curl 访问我的服务器。不知道我是高兴还是难过:)

标签: elixir httpoison


【解决方案1】:

我们已经在多台机器上看到了这种情况。

我们最初使用 ngrok 解决了这个问题。

然后我们发现这条评论表明这是一个 ipv6 问题,按照列出的步骤操作,它对我们有用。 https://github.com/scrogson/oauth2/issues/94#issuecomment-308665656

【讨论】:

    【解决方案2】:

    这里的答案分为两部分:

    1. 是的,您可以指定端口,只需将其放入 URL 本身即可。例如,http://localhost:3000/api/service_call

    2. 重新启动修复了我的系统出现的任何问题。我不知道为什么会有所作为。

    【讨论】:

    • 指定端口是 URL 功能。它与您可能正在使用的任何库无关。查看 RFC 标准:tools.ietf.org/html/rfc3986#section-3.2.3
    • 这正是我所期望的,但它在我的系统上不起作用。我让目标服务器在端口 3000 上本地运行,但它没有收到任何消息。我绝对知道它应该有效。但是,一旦我重新启动系统就很好了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-12
    • 1970-01-01
    • 2013-04-12
    • 1970-01-01
    • 2019-02-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多