【问题标题】:Curl Cmd Line: Seemingly equivalent json POSTS giving different resultsCurl 命令行:看似等效的 json POSTS 给出不同的结果
【发布时间】:2012-07-25 07:12:18
【问题描述】:

我正在使用 curl 将登录信息发布到 json API。我很困惑,因为以下两个我认为是等效的调用给出了不同的结果:

curl -v -H "Accept: application/json" -H "Content-Type: application/json" -X POST -d '{"username":"test@test.com","password":"secret"}' http://api.mysite.com/Services/v1/login.svc/login

此调用导致 400 错误请求。但是,如果我将登录 json 放入名为“login.json”的文件中,并将调用更改为:

curl -v -H "Accept: application/json" -H "Content-Type: application/json" -X POST -d @login.json http://api.mysite.com/Services/v1/login.svc/login

然后调用正常,给出 200 个结果,并返回预期的 json 响应。

为什么第一次调用不起作用?

谢谢!

Rusty 更新

我尝试了以下方法,在 JSON 中使用和不使用单引号:

curl -v -H "Accept: application/json" -H "Content-Type: application/json" --data-urlencode '{username:test@example.com,password:11111111}' "https://api.example.com/login"

但是数据没有发送到服务器。来自 curl 的输出:

Warning: Couldn't read data from file
Warning: "{username:test@example.com,password:11111111}", this makes an empty
Warning: POST.

虽然请求确实得到了 200 OK 响应,但在我使用文件方法时有效的登录仍然失败,可能是因为未发送 JSON。

【问题讨论】:

标签: json curl


【解决方案1】:

不要使用-d,尝试使用--data-urlencode。

因为您可以将文件保存为 UTF8,所以它会自动对您的数据进行 urlencode。

顺便说一句,不需要使用-X POST,如果没有使用-Gis,POST是默认的。

希望对您有所帮助。

【讨论】:

  • 请看我更新到 OP,我试过了,但没用。如果我做错了,请粘贴正确的 curl cmd。
  • @Jonah:对不起,更新后的命令对我来说似乎是正确的。抱歉帮不了你。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-04-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-02
相关资源
最近更新 更多