我写了一小段代码:
from flask import Flask
from flask_restful import Resource, Api
import subprocess
app = Flask(__name__)
api = Api(app)
class SlackReport(Resource):
def get(self):
subprocess.Popen(['python', 'ingestion_ice3_check.py'])
return 'Request submitted'
api.add_resource(SlackReport, '/slackReport')
if __name__ == '__main__':
app.run(debug=True)
如果我执行:
curl --ipv4 http://127.0.0.1:5000/slackReport
服务器发送响应,但是如果我从同一局域网中的另一台机器执行相同的命令,则会收到“连接被拒绝”消息
$ curl -X GET http://10.113.12.20:5000/slackReport
curl: (7) Failed to connect to 10.113.12.20 port 5000: Connection refused
如果我从localhost请求资源,我可以看到来自服务器调试控制台的请求
127.0.0.1 - - [28/Sep/2017 18:15:02] "GET /slackReport HTTP/1.1" 200 -
但是,如果我从远程计算机请求相同的资源,我可以看到端口上的数据包,但烧瓶服务器没有收到任何内容。
$ sudo tcpdump -i ens192 port 5000
18:17:53.132514 IP 10.113.12.25.37096 > tl020dash.commplex-main: Flags [S], seq 3147843104, win 14600, options [mss 1460,sackOK,TS val 822032144 ecr 0,nop,wscale 7], length 0
这是netstat命令的输出
sudo netstat -tnlp | grep :5000
tcp 0 0 127.0.0.1:5000 0.0.0.0:* LISTEN 21872/python
答案 0 :(得分:0)
您正在localhost(127.0.0.1)上运行您的服务,因此只有您的计算机才能访问它。如果您想运行Flask服务,以便网络上的其他内容可以访问它,您可以在运行应用程序时设置一些关键字args。您可能需要以提升的用户身份运行它,以便它可以绑定到该网络端口(10.113.12.20:5000)。
if __name__ == '__main__':
app.run(debug=True, host='10.113.12.20', port=5000)