django - 在 i-framed 应用程序中使用 python 请求访问 URL 参数
问题描述
我正在开发一个需要使用第三方restful-API 的Django 应用程序。应用程序本身在通过 i-frame 中公开的门户进行身份验证后即可访问。当您在门户中选择应用程序时,它会重定向到应用程序 url 并附加一个 url 参数“?tokenid”。这需要检索才能使用需要将 tokenid 参数包含为 cookie 的第三方 API。
在我的应用程序中有一个 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']
没有成功。
有没有其他方法可以实现这一点。我在这里感到困惑。我认为我并没有真正得到的是,这个令牌 id 已经可以检索,因为我是门户内的用户,并且应用程序是从门户内调用的,所以不需要再次使用 request.get (??) . iframe 中的任何 url 都会附加该 ?tokenid 参数,并且有效期为一小时。知道有什么问题吗?
提前谢谢了
解决方案
推荐阅读
- html - 在 CakePHP 中将“i”标签嵌入到“a”标签中
- drag-and-drop - Vuetify TreeView + 拖放
- javascript - 尝试在移动视图中隐藏导航栏
- c - 当我们将值重新分配给 char 指针时,内存会发生什么?
- swift - 在 MVVM-C 中使用 TabBarController,Tab Bar 的协调器
- flutter - 我无法在颤振中使用依赖项中的其他包
- python - 数据库连接在 docker-compose 文件中停止工作
- php - 将这种字符 (
- delphi - 德尔福“免费”TStringDynArray
- java - 使用 java 模拟多个用户连接到 Cassandra