我使用带有Valence提供的Python SDK的Python Requests库来尝试执行GET请求。网址发生了奇怪的事情,我不确定是什么。我得到的响应是200(这让我相信身份验证正在运行),但是当我尝试从Request对象打印JSON时,它会打印页面的HTML而不是JSON。
我使用的是从http://docs.valence.desire2learn.com/clients/python/auth.html读取的修改后的代码。
这是Python代码:
import requests
import auth as d2lauth
from auth import *
app_creds = { 'app_id': '----', 'app_key': '----' }
ac = d2lauth.fashion_app_context(app_id=app_creds['app_id'], app_key=app_creds['app_key'])
auth_url = ac.create_url_for_authentication('ugatest2.view.usg.edu', 'http://localhost:8080')
redirect_url = "https://localhost:8080?x_a=3----&x_b=3dMRgCBAHXJDTA2E6DJIfdWq-gYl-pk77fF_3X5oDUuqc"
uc = ac.create_user_context(auth_url, 'ugatest2.view.usg.edu', True)
route = 'ugatest2.view.usg.edu/d2l/api/versions/'
url = uc.create_authenticated_url(route)
r = requests.get(url)
print(r.text)
输出是页面的HTML而不是JSON。如果我打印(r),我的状态为200.我认为我的重定向网址可能是问题,但我不确定究竟是什么问题。谢谢你的帮助!
答案 0 :(得分:1)
有两件事让我失望:
使用auth_url
创建用户上下文无法正常工作,这是您发送用户所需的网址,以便他们进行身份验证。您需要使用在身份验证后重定向到的URL来构建用户上下文。假设redirect_url
是该网址,您应该将其传递给create_user_context
而不是auth_url
。
ugatest2.view.usg.edu/d2l/api/versions/
不是传递给create_authenticated_route
的有效值,/d2l/api/versions
可能就是您想要的。 SDK将预先添加方案,域和端口,因此包括传递的值中的那些将导致不正确的URI。
答案 1 :(得分:1)
一旦您的应用正常运行,您就可以使用r.json()
而不是r.text
来访问JSON响应。