【发布时间】: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并调用函数比通过requests或urllib更有效(你实际上会有一个 HTTP 请求 在您的机器之外进入网络只是为了返回进入您的机器并由您的网络服务器+应用服务器处理)。 -
那么 API A 如何联系 API B?什么主机?
-
@dirkgroten 我知道,我这样做是因为这些 API 部署在生产中的不同服务器中