标题几乎总结了一下,我正在向google翻译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)
我没有使用请求库的经验,但可能是它没有在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
你可以在app.yaml中试试
handlers:
- url: /youraccount/.*
script: accounts.py
login: required
secure: always
secure:always
使您的网站ssl。我不确定这是不是真正的问题。
GCP不支持开箱即用的Requests库。所以我们必须做一些调整才能使它工作。为了在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。要使用请求,我们需要使用vendoring说明安装请求和requests-toolbelt。 (https://cloud.google.com/appengine/docs/standard/python/tools/using-libraries-python-27#installing_a_library)。基本上我们需要安装我们的自定义库。
(Qazxswpoi)
现在我们可以轻松使用请求库来发出/发布请求。测试你的应用:
https://cloud.google.com/appengine/docs/standard/python/issue-requests