我正在尝试对Django Rest Framework(测试链接)进行一些测试并重现此卷曲调用:
curl -X POST -d "grant_type=password&username=<user_name>&password=<password>"
http://<client_id>:<client_secret>@127.0.0.1:8000/v1/token/
这就是我的尝试:
def test_oauth2_token_for_user(self):
"""
Test Django OAuth Toolkit and make a request for am access token.
"""
self.client.credentials(HTTP_AUTHORIZATION='grant_type ' + "password&username=<user_name>&password=<password")
response = self.client.post('/api/token/')
有人能告诉我从哪里开始。我不确定如何发送标头grant_type=password&username=<user_name>&password=<password>
并使用用户名和密码格式化URL。
答案 0 :(得分:2)
那不是标题。这是完全正常的POST数据,正如test client documentation所示 - 您可以将字典作为第二个参数传递给post
。
response = self.client.post('/api/token/',
{'grant_type': 'password', 'username': username, 'password': password})
答案 1 :(得分:1)
我无法通过django的测试客户端发送到api发送帖子数据和授权数据的方法。
我的解决方案是使用LiveServerTestCase(https://docs.djangoproject.com/en/1.10/topics/testing/tools/#liveservertestcase)设置测试并使用请求库发布:
class AuthTest(LiveServerTestCase):
def test_auth(self):
# ...
requests.post(
http://localhost:8082/o/token/,
dict(username="myuser",
password="mypass",
grant_type="password"
),
auth=(MYAPP.client_id, MYAPP.client_secret)
)