Python 令牌身份验证Django Rest框架HTTPie

Python 令牌身份验证Django Rest框架HTTPie,python,django,django-rest-framework,httpie,Python,Django,Django Rest Framework,Httpie,您好,我正在尝试测试我使用httpie使用DRF实现的令牌身份验证,如下面的教程所示 以下命令: http GET 127.0.0.1:8000/api/projects/ 'Authorization: Token b453919a139448c5891eadeb14bf1080a2624b03' 产生以下错误 usage: http [--json] [--form] [--pretty {all,colors,format,none}] [--style STYLE] [

您好,我正在尝试测试我使用httpie使用DRF实现的令牌身份验证,如下面的教程所示

以下命令:

http GET 127.0.0.1:8000/api/projects/ 'Authorization: Token b453919a139448c5891eadeb14bf1080a2624b03'
产生以下错误

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
因此,我决定与教程不同,并提出如下要求

http GET 127.0.0.1:8000/api/projects/ 'Authorization:b453919a139448c5891eadeb14bf1080a2624b03'
返回了以下消息

HTTP/1.0 401 Unauthorized
Allow: GET, POST, HEAD, OPTIONS
Content-Type: application/json
Date: Thu, 03 Nov 2016 09:52:05 GMT
Server: WSGIServer/0.1 Python/2.7.10
Vary: Accept
WWW-Authenticate: Token
X-Frame-Options: SAMEORIGIN

  {
     "detail": "Authentication credentials were not provided."
  }

提供的任何援助都将是巨大的。我在家里的本地机器上运行

解决方案很简单,如下所示。使用双引号代替单引号,与

对于curl,请使用下面的命令

curl -H "Authorization: Token b453919a139448c5891eadeb14bf1080a2624b03" http://127.0.0.1:8000/api/projects/
供HTTPie使用

http GET http://127.0.0.1:8000/api/projects/ "Authorization: Token b453919a139448c5891eadeb14bf1080a2624b03"

请注意,在文档中,双引号的使用与单引号相反。

与Paul Nyondo的经验相反,对我来说,问题不是单引号/双引号(当使用
bash
作为shell时,两者都可以),而是
授权:
Token
之间的空间

这失败了:

» http GET http://service:8000/api/v1/envs/ 'Authorization: Token 3ea4d8306c6702dcefabb4ea49cfb052f15af85c'

http: error: InvalidHeader: Invalid return character or leading space in header: Authorization
这是有效的(使用双引号):

这也适用(使用单引号):


你试过邮递员的要求吗?如果它在那里工作,那么它一定是您通过HTTPie提交请求的方式中的一个问题。您确定需要双引号吗?对于bash,双引号和单引号是可互换的(插值除外,插值在本例中不适用,因为不存在可插入的字符)。另一种可能的解释见我的答案。
» http GET http://service:8000/api/v1/envs/ "Authorization:Token 3ea4d8306c6702dcefabb4ea49cfb052f15af85c"
HTTP/1.1 200 OK
Allow: GET, HEAD, OPTIONS
Content-Length: 90
Content-Type: application/json
» http GET http://svc.userv.dgvmetro:8000/api/v1/envs/ 'Authorization:Token 3ea4d8306c6702dcefabb4ea49cfb052f15af85c'
HTTP/1.1 200 OK
Allow: GET, HEAD, OPTIONS
Content-Length: 90
Content-Type: application/json