1

curl を使用して、ログイン情報を json API に投稿しています。同等だと思っていた次の 2 つの呼び出しが異なる結果をもたらしているため、混乱しています。

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 応答が返されます。

最初の呼び出しが機能しないのはなぜですか?

ありがとう!

ラスティのアップデート

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 が送信されていないため、file メソッドを使用すると機能するログインは失敗しました。

4

1 に答える 1

0

-d を使用しないでください。 --data-urlencode を使用してみてください。

ファイルを UTF8 で保存する場合があるため、データは自動的に urlencode されます。

ところで、-X POST を使用する必要はありません。-Gi を使用しない場合、POST がデフォルトです。

それが役立つことを願っています。

于 2012-08-16T11:59:26.757 に答える