Google App Engineでリクエストを使用できますか?このライブラリは、RESTクライアントを作成するのに最適だと思います。
7 に答える
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
または同等のもの。
編集:このソリューションは公式ドキュメントの一部になりました:https ://cloud.google.com/appengine/docs/python/issue-requests#issuing_an_http_request
(REQUESTS
タブ内)
はい。Google Appengine(バージョン1.9.18)では、請求を有効にしてソケットのサポートを有効にすると、 バージョン2.3.0が本番環境で機能します(SDKでは機能しません)。
更新:2017年1月31日の時点で、リクエストはバージョン2.9.1で本番環境で機能しています。ただし、Googleクラウド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は本番環境で機能しますが、SDKでSSLv3サポートを削除したDebiansで問題が発生する可能性があります(リクエスト2.3.0には独自の古いurllib3が付属しています)。回避策として、リクエストのurllib3コピーのソースにあるPROTOCOL_SSLv3を含む行を削除することができます。
'module' object has no attribute 'PROTOCOL_SSLv3'
ソケットサポートに関する情報:https ://cloud.google.com/appengine/docs/python/sockets/
これが可能になりました。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は、すぐに使用できるリクエストライブラリの使用をサポートしていません。したがって、それを機能させるには、数週間かかる必要があります。Google App Engineにアプリケーションをデプロイするには、main.py(メインのPythonフラスコアプリが存在する場所)とapp.yaml(GCPで実行するために必要な構成ファイル)を作成する必要があります。Python2.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)。基本的に、カスタムライブラリをインストールする必要があります。
- lib /mkdirlibなどのサードパーティライブラリを保存するディレクトリを作成します
- システムからrequestsとrequests-toolbeltライブラリをアップロードするか、前の手順で作成したlibフォルダーに直接ダウンロードします。
- -tフラグを指定してpip(バージョン6以降)を使用して、前の手順で作成したフォルダーにライブラリーをコピーします。例:pip install -t lib /(pip install -t lib /リクエスト)
- app.yamlファイルと同じフォルダーにappengine_config.pyという名前のファイルを作成します。
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