Posso criar um local com sucesso via curl
executando o seguinte comando:
$ curl -vX POST https://server/api/v1/places.json -d "
auth_token=B8dsbz4HExMskqUa6Qhn& \
place[name]=Fuelstation Central& \
place[city]=Grossbeeren& \
place[address]=Buschweg 1& \
place[latitude]=52.3601& \
place[longitude]=13.3332& \
place[washing]=true& \
place[founded_at_year]=2000& \
place[products][]=diesel& \
place[products][]=benzin \
"
O servidor retorna HTTP/1.1 201 Created
.
Agora eu quero armazenar a carga útil em um arquivo JSON que se parece com isso:
// testplace.json
{
"auth_token" : "B8dsbz4HExMskqUa6Qhn",
"name" : "Fuelstation Central",
"city" : "Grossbeeren",
"address" : "Buschweg 1",
"latitude" : 52.3601,
"longitude" : 13.3332,
"washing" : true,
"founded_at_year" : 2000,
"products" : ["diesel","benzin"]
}
Então eu modifico o comando para ser executado assim:
$ curl -vX POST http://server/api/v1/places.json -d @testplace.json
Isso não retorna HTTP/1.1 401 Unauthorized
. Por quê?
--data-binary
.Respostas:
curl
envia solicitações POST com o tipo de conteúdo padrãoapplication/x-www-form-urlencoded
. Se você deseja enviar uma solicitação JSON, precisará especificar o cabeçalho correto do tipo de conteúdo:Mas isso só funcionará se o servidor aceitar a entrada json. O
.json
final do URL pode indicar apenas que a saída é json, não significa necessariamente que ele também manipulará a entrada json . A documentação da API deve fornecer uma dica sobre isso ou não.A razão pela qual você recebe um
401
erro e não outro erro é provavelmente porque o servidor não pode extrair oauth_token
da sua solicitação.fonte
cat file.json
após o-d
e estava tendo problemas com ele, até que aprendi com esta resposta que posso usar@file.json
. Obrigado :)-H
/--header
várias vezes, pelo menos quando testado no bash no Ubuntu.