【发布时间】:2019-10-16 18:42:27
【问题描述】:
我在 IIS 上的 Windows Server 2016 中部署了一个烧瓶应用程序。一切正常,然后我更新了窗口,现在部署时我无法使用 requests.get()。
这是一个简单的代码:
from flask import Flask
from flask_cors import CORS
from flask import request
import requests
app = Flask(__name__)
CORS(app, resources={r"/*": {"origins": "*"}}, send_wildcard=True)
@app.route("/")
def hello():
r = requests.get('http://google.com')
return r.text
if __name__ == "__main__":
print ("\nAttempting to start server ...")
app.run(threaded = True, port=5052)
当我运行它时,它的浏览器会挂起 30s 左右,然后返回一个 500 错误。
服务器可以访问互联网:我可以浏览、使用 pip,甚至可以从 python 命令行或作为独立程序执行请求,但在部署时不能。
我尝试了 headers、cors,几乎使用了所有可能的设置。我不知道为什么它不再起作用了。
【问题讨论】:
-
请提供控制台输出。您是否收到“正在尝试启动服务器”这个打印?另外请打开调试并在此处发布输出以便更好地理解。
-
flask 应用程序使用 wfastcgi 并部署时,这部分代码不会执行。所以你可以忽略“主要”部分。
-
不管是python、php还是其他语言。除了 python 中的请求和 curl 中的请求或 php 中的 get_file_contents 之外,所有应用程序都有效。如果我直接从服务器的浏览器(javascript 或 i 地址栏)调用 Web 服务,它可以工作,但不能从 localhost 或 IIS 调用。看起来 IIS 几乎阻止了这些类型的操作。
标签: python iis flask python-requests windows-server-2016