Google AppEngineですばらしいリクエストライブラリを使用しようとしています。 App Engineと互換性のある、リクエストが依存するurllib3のパッチを見つけました。 https://github.com/shazow/urllib3/issues/61
私はうまくいくことができます
import requests
しかしその後
response = requests.get('someurl')
次のトレースバックで失敗します。どうしたの?
Traceback (most recent call last):
File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/ext/admin/__init__.py", line 317, in post
exec(compiled_code, globals())
File "<string>", line 6, in <module>
File "/Users/Rohan/Dropbox/MuktiTechnologiesINC/MuktiTechnologies/GAE/humanmictweet/GAE/libraries/requests/api.py", line 52, in get
return request('get', url, **kwargs)
File "/Users/Rohan/Dropbox/MuktiTechnologiesINC/MuktiTechnologies/GAE/humanmictweet/GAE/libraries/requests/api.py", line 40, in request
return s.request(method=method, url=url, **kwargs)
File "/Users/Rohan/Dropbox/MuktiTechnologiesINC/MuktiTechnologies/GAE/humanmictweet/GAE/libraries/requests/sessions.py", line 208, in request
r.send(prefetch=prefetch)
File "/Users/Rohan/Dropbox/MuktiTechnologiesINC/MuktiTechnologies/GAE/humanmictweet/GAE/libraries/requests/models.py", line 458, in send
self.auth = get_netrc_auth(url)
File "/Users/Rohan/Dropbox/MuktiTechnologiesINC/MuktiTechnologies/GAE/humanmictweet/GAE/libraries/requests/utils.py", line 43, in get_netrc_auth
for loc in locations:
File "/Users/Rohan/Dropbox/MuktiTechnologiesINC/MuktiTechnologies/GAE/humanmictweet/GAE/libraries/requests/utils.py", line 40, in <genexpr>
locations = (os.path.expanduser('~/{0}'.format(f)) for f in NETRC_FILES)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/posixpath.py", line 260, in expanduser
userhome = pwd.getpwuid(os.getuid()).pw_dir
AttributeError: 'module' object has no attribute 'getuid'
前述のように、 スタンドアロンurllib3のマスターブランチ はおそらくAppEngineをサポートしています(誰かがこの事実を確認したら、適切なPyPIリリースを実行します)が、Requestsはさまざまなファイルシステムのことを想定しているため、AppEngineをまだサポートしていませんAppEngineに存在しない設定ファイルをロードします。具体的には、発生したエラーは~/.netrc
構成ファイルのロードに関係しています。
問題#49 を参照してください。
その価値については、urllib3で同等のものは次のようになります。
import urllib3
http = urllib3.PoolManager()
response = http.request('GET', 'someurl')
更新:rllib3 v1. 昨日リリースされ、AppEngineのサポートが含まれています。
Google Appengine(バージョン1.9.18) リクエストバージョン2.3.0(のみ!)は動作します本番環境(SDKではない)課金を有効にしている場合。これにより、ソケットのサポートが有効になります。
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'))
ソケットサポートに関する情報: https://cloud.google.com/appengine/docs/python/sockets/
PS:GAEでリクエストを使用する場合は、ひどいものを非常に苦痛なものに置き換えてください。
requests-toolbelt を使用すると、Google AppEngineで最新バージョンのリクエストを使用できます。これにより、AppEngineのURLFetchサービスに対するurllib3の基盤となるサポートを使用するようにリクエストが設定されます。