Использование библиотеки python запросов в Google App Engine
Я пытаюсь использовать удивительную библиотеку запросов в 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'
Ответы
Ответ 1
Как уже упоминалось, главная ветвь автономного urllib3 якобы поддерживает AppEngine (я сделаю правильный выпуск PyPI, как только кто-то подтвердит этот факт), но Requests еще не поддерживает AppEngine, поскольку он делает предположение о том, что различные файловые системы загружают файлы конфигурации, которых нет в AppEngine. В частности, ошибка, с которой вы столкнулись, связана с загрузкой конфигурационного файла ~/.netrc
.
См. Проблема № 493.
Для чего стоит эквивалент в urllib3:
import urllib3
http = urllib3.PoolManager()
response = http.request('GET', 'someurl')
Обновление: urllib3 v1.3 был выпущен вчера, который включает поддержку AppEngine.
Ответ 2
В Google Appengine (версия 1.9.18) requests версия 2.3.0 (только!) работает В ПРОИЗВОДСТВЕ (но не на SDK), если у вас включен биллинг, что позволяет поддерживать сокеты.
запросы на SDK Appengine не выполняются со всеми запросами 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?
Ответ 3
Вы можете использовать последнюю версию запросов в Google App Engine с помощью requests-toolbelt. Это настраивает запросы на использование поддержки urlib3 для службы URL-сервиса App Engine.