【发布时间】:2019-09-02 11:13:33
【问题描述】:
我已经公开了一个 URL (http://127.0.0.1:5000/daily),但在 Google Compute Engine (GCE) 中我没有得到这些值。如果我在简单的python程序中通过请求访问这个URL,它就会高效运行。
import requests
import json
req=requests.get('http://127.0.0.1:5000/daily')
a = json.loads(req.text)
discount_rate = a['data']['policy_rate']
six_months_kibor = a['data']['today_kibor_rate']
dollar_to_pkr= a['data']['today_usd_rate']
print(discount_rate, six_months_kibor, dollar_to_pkr)
我从 GCE 收到的错误是:
urllib3.exceptions.NewConnectionError: <urllib3.connection.HTTPConnection object at 0x7f93526c16a0>: Failed to establish a new connection: [Errno 111] Connection refused
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/dev_baseh/.local/lib/python3.5/site-packages/requests/adapters.py", line 449, in send
timeout=timeout
File "/home/dev_baseh/.local/lib/python3.5/site-packages/urllib3/connectionpool.py", line 641, in urlopen
_stacktrace=sys.exc_info()[2])
File "/home/dev_baseh/.local/lib/python3.5/site-packages/urllib3/util/retry.py", line 399, in increment
raise MaxRetryError(_pool, url, error or ResponseError(cause))
urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host='127.0.0.1', port=5000): Max retries exceeded with url: /daily (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f93526c16a0>: Failed to establish a new connection: [Errno 111] Connection refused',))
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "test.py", line 6, in <module>
req=requests.get('http://127.0.0.1:5000/daily')
File "/home/dev_baseh/.local/lib/python3.5/site-packages/requests/api.py", line 75, in get
return request('get', url, params=params, **kwargs)
File "/home/dev_baseh/.local/lib/python3.5/site-packages/requests/api.py", line 60, in request
return session.request(method=method, url=url, **kwargs)
File "/home/dev_baseh/.local/lib/python3.5/site-packages/requests/sessions.py", line 533, in request
resp = self.send(prep, **send_kwargs)
File "/home/dev_baseh/.local/lib/python3.5/site-packages/requests/sessions.py", line 646, in send
r = adapter.send(request, **kwargs)
File "/home/dev_baseh/.local/lib/python3.5/site-packages/requests/adapters.py", line 516, in send
raise ConnectionError(e, request=request)
requests.exceptions.ConnectionError: HTTPConnectionPool(host='127.0.0.1', port=5000): Max retries exceeded with url: /daily (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f93526c16a0>: Failed to establish a new connection: [Errno 111] Connection refused', ))
我不知道为什么它没有在 GCE 上运行。 提前致谢:)
【问题讨论】:
-
你在哪里暴露了 IP 127.0.0.1 ? 127.0.0.1 只能从与暴露服务器相同的计算机上的其他程序访问。无法从其他计算机访问它。
-
知道了,我正在使用我的公共 IP 地址,但是如何访问 127.0.0.1:5000/daily/ 上的可用值?
-
如果您运行自己的本地服务器,那么首先您必须使用 IP
0.0.0.0而不是127.0.0.1运行服务器,因此它将使用计算机中安装的所有网卡 (NIC) 而不是虚拟卡(环回) 和本地网络中的其他计算机将可以访问此服务器。要从 Internet 访问,您必须找到您的外部 IP。它不是您计算机的 IP,而是外部路由器的 IP,它将所有连接重定向到您的计算机。您可以使用显示您的外部 IP 的网页。但通常路由器只重定向普通端口,如 80 而不是 5000,因此最好在本地服务器中使用端口 80。 -
您也可以使用ngrok 在 Internet 上公开您的本地服务器 -
ngrok http 5000- 它会为您的本地服务器创建随机 URL。如果您想要固定网址,则必须付费。 -
使用免费版本的 ngrok 是一个问题 - 当您重新启动 ngrok 时,它会创建新的随机 URL。
标签: python python-requests localhost google-compute-engine