标题几乎总结了一下,我正在向谷歌翻译API请求:
payload = {"key":translate_api_key, "q":str(sentence)}
try:
api_response = requests.get("https://www.googleapis.com/language/translate /v2/detect", params=payload)
except Exception, e:
print e
这通常正常工作(我的意思是将其作为我桌面上的脚本运行)但在谷歌应用引擎服务器上我得到了这样的回复:
{u'error': {u'message': u'SSL is required to perform this operation.', u'code': 403, u'errors': [{u'message': u'SSL is required to perform this operation.', u'domain': u'global', u'reason': u'sslRequired'}]}}
我该如何解决这个问题?
编辑: 似乎请求的https与GAE没有很好的协作。使用urlfetch和urllib似乎解决了这个问题。
payload = dict(key=translate_api_key, q=sentence)
payload = urllib.urlencode(payload)
url = "https://www.googleapis.com/language/translate/v2/detect?"
api_response = urlfetch.fetch(url+payload)
答案 0 :(得分:1)
我没有使用请求库的经验,但可能是它未在App Engine上完全实现。
App Engine上的首选方法是使用urlfetch
from google.appengine.api import urlfetch
url = "https://www.googleapis.com/language/translate/v2/detect"
payload = {"key":translate_api_key, "q":str(sentence)}
result = urlfetch.fetch(url=url, payload=payload)
if result.status_code == 200:
api_response = result.content
答案 1 :(得分:0)
您可以在app.yaml
中试用handlers:
- url: /youraccount/.*
script: accounts.py
login: required
secure: always
secure:always
使您的网站ssl成为可能。我不确定这是不是真正的问题。
答案 2 :(得分:0)
GCP不支持立即使用请求库。因此,我们必须花一些时间才能使它生效。 为了在Google App Engine上部署应用程序,我们需要制作main.py(主python flask应用程序所在的位置)和app.yaml(在GCP中运行它所需的配置文件)。 这是适用于python 2.7环境的app.yaml文件的示例代码
runtime: python27
api_version: 1
threadsafe: true
handlers:
- url: /.*
redirect_http_response_code: 301
script: main.app
libraries:
- name: flask
version: 0.12
现在,我们需要配置请求库以在内部使用URLfetch。 要使用请求,我们需要使用供应商说明安装请求和request-toolbelt。 (https://cloud.google.com/appengine/docs/standard/python/tools/using-libraries-python-27#installing_a_library)。 基本上,我们需要安装自定义库。
编辑appengine_config.py文件,并将您的库目录提供给vendor.add()方法。 示例appengine_config.py文件
来自google.appengine.ext导入供应商
vendor.add('lib / requests') vendor.add('lib / requests_toolbelt')
一旦安装,请使用request_toolbelt.adapters.appengine模块配置请求以使用URLFetch。 将以下代码复制到main.py文件的开头
导入请求 从request_toolbelt.adapters导入appengine appengine.monkeypatch(validate_certificate = True)
(https://cloud.google.com/appengine/docs/standard/python/issue-requests)
现在,我们可以轻松地使用请求库发出获取/发布请求。 测试您的应用程序:
dev_appserver.py --port=<port number> app.yaml