卷曲请求上的HTTP / 1.1 401未经授权的错误 - heroku

时间:2015-01-16 21:16:33

标签: ruby-on-rails api curl heroku httprequest

我试图通过curl向我的heroku api发送请求,但我一直收到此错误:

* Hostname was NOT found in DNS cache
*   Trying 23.21.169.234...
* Connected to helphy-api.herokuapp.com (23.21.169.234) port 80 (#0)
> POST /users/sign_in HTTP/1.1
> User-Agent: curl/7.35.0
> Host: helphy-api.herokuapp.com
> Accept: */*
> Authorization: Bearer d5bd07e4-a1c9-46d2-8d8e-d2a7cbc8501f, Accept: application/json
> Content-Length: 68
> Content-Type: application/x-www-form-urlencoded
> 
* upload completely sent off: 68 out of 68 bytes
< HTTP/1.1 401 Unauthorized 
< Connection: keep-alive
< X-Frame-Options: SAMEORIGIN
< X-Xss-Protection: 1; mode=block
< X-Content-Type-Options: nosniff
< Content-Type: */*; charset=utf-8
< Cache-Control: no-cache
< X-Request-Id: 5b615fce-0674-4302-a9b9-f12cb00db754
< X-Runtime: 0.005328
* Server WEBrick/1.3.1 (Ruby/2.0.0/2014-11-13) is not blacklisted
< Server: WEBrick/1.3.1 (Ruby/2.0.0/2014-11-13)
< Date: Fri, 16 Jan 2015 21:10:12 GMT
< Content-Length: 49
< Via: 1.1 vegur

这是我的卷曲请求:

curl -v -H "Authorization: Bearer $TUTORIAL_KEY, Accept: application/json" -X POST http://helphy-api.herokuapp.com/users/sign_in   -d '{"user": {"email": "xxxxxxx@gmail.com", "password": "xxxxxxx"}}'

更新

这是日志:

2015-01-16T21:43:04.342815+00:00 app[web.1]: Processing by SessionsController#create as */*
2015-01-16T21:43:04.342822+00:00 app[web.1]:   Parameters: {"{\"user\": {\"email\": \"xxxxxx@gmail.com\", \"password\": \"xxxxxxx\"}}"=>nil}
2015-01-16T21:43:04.347678+00:00 app[web.1]: Completed 401 Unauthorized in 5ms
updating...done. Updated to 3.23.2

电子邮件和密码正确无误,顺便说一下。

1 个答案:

答案 0 :(得分:0)

您的-d参数应该是x-www-form-urlencoded,就像查询字符串一样:

user[email]=email&user[password]=password

如果您想继续使用JSON,则必须将内容类型标题添加到-H

Content-type: application/json

这让服务器知道将您的POST数据解释为JSON而不是x-www-form-urlencoded字符串。这就是为什么在服务器日志中参数出现的原因如下:

Parameters: {"{\"user\": {\"email\": \"xxxxxx@gmail.com\", \"password\": \"xxxxxxx\"}}"=>nil}

这只是一个字符串,而不是JSON,因为服务器不知道你发送了JSON,因为你没有包含Content-type头,默认服务器假设POST数据是x-www-form-urlencoded字符串。