Google App Engineで Requests を使用できますか?このライブラリは、RESTクライアントを作成するのに最適だと思います。
はい。 Google Appengine(バージョン1.9.18)では requestsバージョン2.3.0は本番環境で動作します(SDKでは動作しません) )課金を有効にしている場合は、ソケットのサポートが有効になります。
更新:2017年1月31日の時点で、リクエストはバージョン2.9.1の本番環境で機能しています。ただし、Google Cloud SDK141.0.0では機能しません
appengine SDKでのリクエストは、すべてのhttps://リクエストで失敗します。
ConnectionError: ('Connection aborted.', error(13, 'Permission denied'))
リクエストバージョン2.4.1は、次の場合に本番環境で失敗します。
File "distlib/requests/adapters.py", line 407, in send
raise ConnectionError(err, request=request)
ConnectionError: ('Connection aborted.', error(13, 'Permission denied'))
バージョン2.5.1が本番環境で失敗すると、次のように要求されます。
File "distlib/requests/adapters.py", line 415, in send
raise ConnectionError(err, request=request)
ConnectionError: ('Connection aborted.', error(13, 'Permission denied'))
リクエストバージョン2.3.0は本番環境で機能しますが、DebianがSDKでSSLv3サポートを削除すると問題が発生する可能性があります(リクエスト2.3.0には独自の古いurllib3が付属しています)。回避策として、リクエストのurllib3コピーのソースにあるPROTOCOL_SSLv3を含む行を削除することができます。
'module' object has no attribute 'PROTOCOL_SSLv3'
ソケットサポートに関する情報: https://cloud.google.com/appengine/docs/python/sockets/
requests-toolbelt
ライブラリをインストールします: https://github.com/sigmavirus24/requests-toolbelt
App Engineの場合、次のようになります:pip install requests-toolbelt -t lib
(参照: https://cloud.google.com/appengine/docs/python/tools/using-libraries-python-27#installing_a_library )
それから加えて:
from requests_toolbelt.adapters import appengine
appengine.monkeypatch()
main.py
または同等のもの。
Edit:このソリューションは公式ドキュメントの一部になりました: https://cloud.google.com/appengine/docs/python/ issue-requests#issuing_an_http_request (REQUESTS
タブ内)
これが可能になりました。appengine_config.pyの次の回避策の組み合わせを使用して機能させました。
# Step 1: first add requests and requests-toolbelt to your requirements.txt (or however you install them via pip)
# Step 2: in appengine_config.py add the following snippet:
# see https://cloud.google.com/appengine/docs/python/issue-requests#issuing_an_http_request
import requests
import requests_toolbelt.adapters.appengine
# Use the App Engine Requests adapter. This makes sure that Requests uses
# URLFetch.
requests_toolbelt.adapters.appengine.monkeypatch()
# also monkey patch platform.platform() from https://code.google.com/p/googleappengine/issues/detail?id=12982
import platform
def patch(module):
def decorate(func):
setattr(module, func.func_name, func)
return func
return decorate
@patch(platform)
def platform():
return 'AppEngine'
いいえ、 もっと最近の投稿 では、Pythonとの違いが大きいため、開発者はGAEをサポートしていないと言っています。
Google App Engineで動作するようにリクエストを修正すると同時に、アプリケーションをGAEの外部で実行できるようにするために、次のコードを追加しました。
try:
from google.appengine.api import urlfetch
from requests_toolbelt.adapters import appengine
appengine.monkeypatch()
except ImportError:
pass
はい、リクエストモジュールを使用できます。 GCPは、そのまま使用できるRequestsライブラリの使用をサポートしていません。したがって、それを機能させるには、数週間を費やす必要があります。 Google App Engineにアプリケーションをデプロイするには、main.py(main python flask appが存在する)と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を内部で使用するようにリクエストライブラリを構成する必要があります。リクエストを使用するには、ベンダーの指示を使用してリクエストとrequests-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ファイルのサンプル
from google.appengine.ext import vendor
# Add any libraries install in the "lib" folder.
vendor.add('lib/requests')
vendor.add('lib/requests_toolbelt')
インストールしたら、requests_toolbelt.adapters.appengineモジュールを使用して、URLFetchを使用するようにリクエストを設定します。以下のコードをmain.pyファイルの先頭にコピーします
import requests
from requests_toolbelt.adapters import appengine
appengine.monkeypatch(validate_certificate=True)
( https://cloud.google.com/appengine/docs/standard/python/issue-requests )
これで、リクエストライブラリを使用してget/postリクエストを簡単に作成できます。アプリをテストします。
dev_appserver.py --port=<port number> app.yaml