1

我正在使用 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 响应。

为什么第一个电话不起作用?

谢谢!

生锈的更新

我尝试了以下方法,包括 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 响应,但当我使用 file 方法时,登录仍然失败,大概是因为没有发送 JSON。

4

1 回答 1

0

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

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

顺便说一句,不需要使用 -X POST,如果不使用 -Gis,则默认为 POST。

希望有帮助。

于 2012-08-16T11:59:26.757 回答