Я разрабатываю приложение Django, которое должно использовать сторонний restful-API.Само приложение доступно после аутентификации с портала, где отображается внутри i-кадра.Когда вы выбираете приложение на портале, оно перенаправляется на URL приложения и добавляет параметр URL «? Tokenid».Это нужно получить, чтобы использовать сторонний API, который должен включать параметр tokenid в качестве файла cookie.
В моем приложении есть модуль services.py, где я создаю все методы API для доступа к этому третьему.API стороны, например:
url='https://www.fooapp.com'
token = request.get(url, 'tokenid')
cookies = {'session': token }
при нажатии на ссылку приложения из главного портала, ответ добавляет параметр tokenid:
''https://www.fooapp.com/?tokenid=.eJwty8FqhDAQANB_mbMs2axmjKf-x1JkdCYyEGNxDK0s---V0uM7vBcoSzn0OGF4wb5lMRieMFXNrGUZVyq0yA6fDRznl8AA1S42UJUv5Kq26lIl36ZMRWwXO7bzo1RdKH_TeVOBdwNGax4LrTL-NXSRXJq4jeERKUjybY9eZMZpZu87xIgxCcP_NDHTrVz559rjTI-AQVzXchdSdM57h3Pn7yR9knvLGCj1kSnA-xcnjUmc.XNmOdg.hbtMmT5BkmOkhklP3JqgksDijhc''
, затем одну из функций, чтобы использовать одинМетод API:
def get_foo():
url = 'https://thirdparty.com/api/v0/foo/'
r = requests.get(url, params=cookies)
data = r.json()
foos_dict = {foo['name']:foo['id'] for foo in data if 'name' in foo and 'id' in foo}
return foo_dict
, тогда, по моему мнению, я вызываю эту функцию и т. д .:
class Foo(generic.TemplateView):
def get(self, request):
foo_dict = services.get_foo()
return render(request, 'foo.html', foo_dict)
Я получаю это
HTTPSConnectionPool(host='wwww.foo.com', port=443): Max retries exceeded with url: /?tokenid (Caused by NewConnectionError('<urllib3.connection.VerifiedHTTPSConnection object at 0x000002261DFCCA20>: Failed to establish a new connection: [Errno 11001] getaddrinfo failed',))
Я также пытался использовать
import urllib.parse as urlparse
url = 'https://wwww.foo.com/'
parsed = urlparse.urlparse(url)
token = urlparse.parse_qs(parsed.query)['?tokenid']
безуспешно.
Есть ли другой способ добиться этого.Я озадачен здесь.Я думаю, что на самом деле я не понимаю, что этот идентификатор токена уже доступен для извлечения, так как я являюсь пользователем внутри портала, и приложение вызывается изнутри портала, поэтому нет необходимости снова использовать request.get (??),К любому URL-адресу в iframe добавляется параметр? Tokenid, и он действителен в течение одного часа.Есть идеи, что может быть не так?
Большое спасибо заранее