使用请求python库在Google App Engine中发送HTTPS请求

问题描述 投票:0回答:3

标题几乎总结了一下,我正在向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)
google-app-engine python-2.7 ssl python-requests google-translate
3个回答
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

0
投票

你可以在app.yaml中试试

handlers:
- url: /youraccount/.*
  script: accounts.py
  login: required
  secure: always

secure:always使您的网站ssl。我不确定这是不是真正的问题。


0
投票

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)。基本上我们需要安装我们的自定义库。

  1. 创建一个目录来存储第三方库,例如lib / mkdir lib
  2. 从系统上传请求和请求工具带库,或者将它们直接下载到前面步骤中创建的lib文件夹中。
  3. 使用带有-t标志的pip(版本6或更高版本)将库复制到您在上一步中创建的文件夹中。例如:pip install -t lib /(pip install -t lib / requests)
  4. 在与app.yaml文件相同的文件夹中创建名为appengine_config.py的文件。
  5. 编辑appengine_config.py文件并将您的库目录提供给vendor.add()方法。示例appengine_config.py文件 来自google.appengine.ext导入供应商 在“lib”文件夹中添加任何库安装。 vendor.add('lib / requests')vendor.add('lib / requests_toolbelt')
  6. 安装后,使用requests_toolbelt.adapters.appengine模块配置使用URLFetch的请求。将以下代码复制到main.py文件的开头 来自requests_toolbelt.adapters的请求导入appengine appengine.monkeypatch(validate_certificate = True)

(Qazxswpoi)

现在我们可以轻松使用请求库来发出/发布请求。测试你的应用:

https://cloud.google.com/appengine/docs/standard/python/issue-requests
© www.soinside.com 2019 - 2024. All rights reserved.