我已在Python中构建了由节点应用程序获取的App Engine API。该API的预期工作方式是(1)在生产中获取和发布请求,以及(2)在开发中获取请求。在开发中发布请求时失败,我可以使用一些帮助找出原因。
在我的节点环境中,我看到错误:
请求的请求上没有'Access-Control-Allow-Origin'标头 资源。因此,不允许原点“ http://localhost:4444” 访问。响应的HTTP状态码为500。如果响应不透明 满足您的需求,将请求的模式设置为“ no-cors”以获取 禁用了CORS的资源。
但是我已经在我的应用程序中使用了flask_cors包,所以我想知道这是否真的是CORS问题。
我激活的虚拟python环境日志:
文件 “ /myproject/googleAdsApi/env/lib/python2.7/site-packages/urllib3/contrib/appengine.py”, 第103行, init “ URLFetch在此环境中不可用。”
所以也许我应该在虚拟环境中使用URLFetch的替代方法?
获取:
fetch('http://localhost:8080/api/get_accounts', {
method: "POST",
mode: "cors",
cache: "no-cache",
credentials: "same-origin",
headers: {
"Content-Type": "application/json; charset=utf-8",
},
redirect: "follow",
referrer: "no-referrer",
body: JSON.stringify(credentials)
})
.then(response => response.json())
.then(result => console.log(result));
flask_cors:
app = Flask(__name__)
cors = CORS(app, resources={r"/api/*": {"origins": "*"}})
答案 0 :(得分:2)
始终使用dev_appserver.py在GAE应用程序上运行本地开发环境。 GAE具有很多特性,很难在本地virtualenv上手动复制。另外,您还有很多有用的工具可以监视各种服务(任务队列,内存缓存,存储等)。 dev_appserver.py还会自动加载许多GAE本机api供您使用,并且它们经常具有自己的流行lib版本,这些版本适用于无服务器环境(URLFetch是其中之一)
官方文档 https://cloud.google.com/appengine/docs/standard/python/tools/using-local-server