Доступ к параметрам URL с помощью запросов Python в приложении i-framed - PullRequest
0 голосов
/ 13 мая 2019

Я разрабатываю приложение 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, и он действителен в течение одного часа.Есть идеи, что может быть не так?

Большое спасибо заранее

...