【发布时间】: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。
【问题讨论】:
-
我使用 curl --trace-ascii 选项来查看正在发送的数据。它没有被破坏,所以我认为这不是问题
-
请显示两个不同的跟踪文件。