33

Google App Engineでリクエストを使用できますか?このライブラリは、RESTクライアントを作成するのに最適だと思います。

4

7 に答える 7

42

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タブ内)

于 2016-05-18T15:52:07.843 に答える
27

はい。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/

于 2015-02-16T15:29:46.863 に答える
8

まだですが、うまくいけばすぐに。GAEのサポートに取り組んでいます-問題#498(App Engineの修正)を参照してください。

Requestsはurllib3を使用し、urllib3GAEでサポートされているhttplibをurlfetchAPIのラッパーとして使用します。urllib3はGAEで使用できないいくつかのモジュールを使用しますが、urllib3をGAEで使用できるように、この使用法は意図的にオプションになっています。

于 2012-04-07T18:13:06.330 に答える
8

これが可能になりました。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'
于 2016-09-19T20:21:27.303 に答える
3

いいえ、最近の投稿では、Pythonとの違いが大きすぎるため、開発者はGAEをサポートしていないと述べています。

于 2014-07-23T16:34:12.993 に答える
2

Google App Engineで動作するようにリクエストを修正すると同時に、アプリケーションをGAEの外部で実行できるようにするために、次のコードを追加しました。

try:
    from google.appengine.api import urlfetch
    from requests_toolbelt.adapters import appengine
    appengine.monkeypatch()
except ImportError:
    pass
于 2019-01-06T01:03:37.043 に答える
0

はい、リクエストモジュールを使用できます。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)。基本的に、カスタムライブラリをインストールする必要があります。

  1. lib /mkdirlibなどのサードパーティライブラリを保存するディレクトリを作成します
  2. システムからrequestsとrequests-toolbeltライブラリをアップロードするか、前の手順で作成したlibフォルダーに直接ダウンロードします。
  3. -tフラグを指定してpip(バージョン6以降)を使用して、前の手順で作成したフォルダーにライブラリーをコピーします。例:pip install -t lib /(pip install -t lib /リクエスト)
  4. app.yamlファイルと同じフォルダーにappengine_config.pyという名前のファイルを作成します。
  5. 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')
    
  6. インストールしたら、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
于 2018-09-17T08:02:00.630 に答える