【问题标题】:HTTPConnectionPool(host=\'0.0.0.0\', port=7000): Max retries exceeded with url (Caused by NewConnectionErrorHTTPConnectionPool(host=\'0.0.0.0\', port=7000): url 超出最大重试次数(由 NewConnectionError 引起
【发布时间】:2019-08-02 15:31:24
【问题描述】:

我正在使用 python 使 2 个 API 在它们之间进行通信,我进行了测试并且两个 API 都可以正常工作,当我尝试向 API A(用烧瓶制作)发送请求时出现问题,以便 A 可以通过将数据发送到 API B(使用 django 制作),然后再次将结果返回给 A。

当我尝试测试这个端点时,响应是:

HTTPConnectionPool(host='0.0.0.0', port=7000): Max retries exceeded with url: /verify?0 (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7fa0b939df50>: Failed to establish a new connection: [Errno 111] Connection refused'))

测试文件和手动测试以这种方式失败,如果我使用 API A 发出的 url 向 API B 发出请求,它会返回一个 ok 消息。

我在想我遗漏了一些关于 API B 中的配置的东西,但是在哪里呢?还有什么?

简要总结

  • API A,它在烧瓶中制作并在码头容器中本地运行

  • API B 它是用 django 制作的,并且在配置文件 settings.py 中有 ALLOWED_HOSTS = ["*"] 并且也在本地运行

  • 当我向 API A 发出调用 API B 的请求时,B 从未在控制台日志中注册任何事件,但 API B 调用 API A 请求成功

【问题讨论】:

  • 这是在您的本地机器上,以开发模式运行(即使用runserver)吗?无法在与开发服务器的请求中发出请求。您需要使用单独的应用服务器运行,使用可以处理多个并发连接的适当生产网络服务器来执行此操作。
  • @dirkgroten 我忘了添加 API B 在本地以开发模式运行,而 API A 是一个 docker 容器
  • 您打算如何部署这些?如果这一切都在一台机器上运行,请记住这只是 python 并且只使用 import 并调用函数比通过 requestsurllib 更有效(你实际上会有一个 HTTP 请求 在您的机器之外进入网络只是为了返回进入您的机器并由您的网络服务器+应用服务器处理)。
  • 那么 API A 如何联系 API B?什么主机?
  • @dirkgroten 我知道,我这样做是因为这些 API 部署在生产中的不同服务器中

标签: python docker


【解决方案1】:

事实证明,我试图从 docker API 使用 0.0.0.0:portlocalhost:port 进行连接,我只需要使用我的公共 IP。

【讨论】:

    【解决方案2】:

    要从自身访问服务器,请使用http://localhost/http://127.0.0.1/

    您也可以使用http://192.168.X.X 从同一网络上的设备访问它。

    您需要获取您的公共 IP 地址,您可以在 Windows 机器上使用 ipconfig 命令找到该地址。

    那么,你可以这样尝试:

    http://<public_ip>:<your_port>/
    

    它会显示服务器欢迎页面。

    【讨论】:

      猜你喜欢
      • 2020-07-19
      • 1970-01-01
      • 2016-11-17
      • 2014-01-27
      • 2019-09-24
      • 1970-01-01
      • 2020-10-31
      • 2019-10-30
      • 2020-11-18
      相关资源
      最近更新 更多