Curl Cmd Line:看似相同的json POSTS给出不同的结果

时间:2012-07-25 07:12:19

标签: json curl

我正在使用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 Bad Request。但是,如果我将登录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。

1 个答案:

答案 0 :(得分:0)

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

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

BTW,不需要使用-X POST,如果-Gis没有使用,POST是默认值。

希望有所帮助。