This is output我正在尝试使用HTTPIE从api端点获取数据,以下是命令,
http http://127.0.0.1:8000/hello/ 'Authorization: Token c9a5b630b1887efdd3ca2db82aae9cec2c44257e'
我生成了令牌并将其附加到api端点,我也使用curl来获取数据,但是它显示了类似的错误。
Views.py
from django.shortcuts import render
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework.permissions import IsAuthenticated
class HelloView(APIView):
permission_classes = (IsAuthenticated,)
def get(self,request):
content = {'message': 'Hello'}
return Response(content)
settings.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'core',
'rest_framework',
'rest_framework.authtoken',
]
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': [
'rest_framework.authentication.TokenAuthentication',
'rest_framework.authentication.SessionAuthentication',
],
}
输出
usage: http [--json] [--form] [--pretty {all,colors,format,none}]
[--style STYLE] [--print WHAT] [--headers] [--body] [--verbose]
[--all] [--history-print WHAT] [--stream] [--output FILE]
[--download] [--continue]
[--session SESSION_NAME_OR_PATH | --session-read-only SESSION_NAME_OR_PATH]
[--auth USER[:PASS]] [--auth-type {basic,digest}]
[--proxy PROTOCOL:PROXY_URL] [--follow]
[--max-redirects MAX_REDIRECTS] [--timeout SECONDS]
[--check-status] [--verify VERIFY]
[--ssl {ssl2.3,ssl3,tls1,tls1.1,tls1.2}] [--cert CERT]
[--cert-key CERT_KEY] [--ignore-stdin] [--help] [--version]
[--traceback] [--default-scheme DEFAULT_SCHEME] [--debug]
[METHOD] URL [REQUEST_ITEM [REQUEST_ITEM ...]]
http: error: argument REQUEST_ITEM: "Token" is not a valid value
答案 0 :(得分:2)
您可以尝试使用curl甚至邮递员发出请求,看看它是否有效,
curl -X GET http://127.0.0.1:8000/hello/ -H "Authorization: Token Your generated token here"
或者使用邮递员,将令牌传递到请求标头上,如下所示:
不要忘记使用命令生成令牌
python manage.py drf_create_token YOURUSER
答案 1 :(得分:0)
确定要为http调用设置标头吗?
--headers
这是API文档中的示例:
curl -X GET http://127.0.0.1:8000/api/example/ -H 'Authorization: Token 9944b09199c62bcf9418ad846dd0e4bbdfc6ee4b'
答案 2 :(得分:0)
由于使用Windows,因此应使用双引号将Authorization
标头包含在内。 Windows(特别是cmd.exe)无法识别单引号,并将标头的每个部分都视为一个单独的参数。
因此更改为:
http http://127.0.0.1:8000/hello/ "Authorization: Token c9a5b630b1887efdd3ca2db82aae9cec2c44257e"
答案 3 :(得分:0)
解决方案很简单,如下所示。与DRF Documentation 所说的
相反,使用双引号代替单引号要卷曲,请使用以下命令
curl -H "Authorization: Token c9a5b630b1887efdd3ca2db82aae9cec2c44257e" http://127.0.0.1:8000/hello/
对于HTTPie使用
http GET http://127.0.0.1:8000/hello/ "Authorization: Token c9a5b630b1887efdd3ca2db82aae9cec2c44257e"
请注意,在文档中使用双引号与单引号相反。
答案 4 :(得分:0)
当我将 cmd 切换到 windows 10.bash 时,问题本身就解决了。