curl适用于localhost,但它不能远程工作

时间:2017-09-28 16:33:41

标签: python curl

我写了一小段代码:

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

1 个答案:

答案 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)