Appengine:“ URLFetch在此环境中不可用。”

时间:2018-08-20 11:32:19

标签: python google-app-engine virtualenv

我已在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": "*"}})

1 个答案:

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