Использование библиотеки запросов Python в Google App Engine - PullRequest
24 голосов
/ 19 марта 2012

Я пытаюсь использовать потрясающую библиотеку запросов в Google App Engine. Я нашел патч для urllib3, на который опираются запросы, который совместим с App Engine. 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'

Ответы [ 3 ]

14 голосов
/ 19 марта 2012

Как уже упоминалось, основная ветка автономного urllib3 предположительно теперь поддерживает AppEngine (я сделаю правильную версию PyPI, как только кто-то подтвердит этот факт), но Requests пока не поддерживает AppEngine, поскольку она делает предположение о различныхвещи файловой системы для загрузки файлов конфигурации, которых нет в AppEngine.В частности, ошибка, с которой вы столкнулись, связана с загрузкой файла конфигурации ~/.netrc.

См. Issue # 493 .

Сколько стоит эквивалент в urllib3будет:

import urllib3
http = urllib3.PoolManager()
response = http.request('GET', 'someurl')

Обновление: urllib3 v1.3 было выпущено вчера, включая поддержку AppEngine.

9 голосов
/ 07 июня 2016

Вы можете использовать последнюю версию запросов в Google App Engine с помощью запросов-toolbelt .Это настраивает запросы на использование базовой поддержки urllib3 для службы URLFetch в App Engine.

9 голосов
/ 16 февраля 2015

В 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: Заменить awsome на очень болезненный, если вы собираетесь использовать запросыв GAE.

См. также: Можно ли использовать библиотеку запросов Python в Google App Engine?

...