Escapamento adequado de duplas cotações para dados de postagem de curvas?

2

Estou tentando testar um servidor, enviando dados JSON e lendo a resposta.

Eu preciso de POST dados como {"item":"value with spaces"} , mas quando eu uso curl , descubro que ela envia as barras invertidas, assim como as aspas duplas:

curl -d "{\"item\":\"value with spaces\"}" http://myserver.com/somerubyapp?get=stuff

O servidor realmente recebe "{\"item\":\"value with spaces\"}" , incluindo as aspas duplas nas extremidades da string, as barras invertidas e tudo mais.

Estou usando curl incorretamente ou é um problema com meu shell, bash?

    
por Adam Davis 20.05.2014 / 21:47

2 respostas

3

É um tipo de necroposting, mas eu tive o mesmo problema recentemente (com um backend diferente) e descobri que o motivo está em um tipo de conteúdo errado. Por padrão é "text / plain" ou "text / html", e no meu caso curl -H "Content-Type: application/json" -d ... resolveu o problema.

    
por 20.05.2016 / 20:40
1

O que você está usando no lado do servidor para imprimir os parâmetros? Pode muito bem ser um artefato desse método.

Ambos os métodos de cotação, isto é, "{\"... e '{"... estão ok.

Edit: Vou dar um exemplo do efeito que estou insinuando:

% irb -r json
>> h = {"item" => "value with spaces"}    # (1)
=> {"item"=>"value with spaces"}          # (2)
>> h.to_json
=> "{\"item\":\"value with spaces\"}"     # (3)
>> puts(h.to_json)
{"item":"value with spaces"}              # (4)
=> nil

(1) define um hashtable que consiste em uma única chave com um valor associado. irb mostra o resultado em (2), que é o hashtable novamente. Agora, quando olho para a representação JSON de h , irb escapa as aspas internas em (3), enquanto (4) mostra que as barras invertidas não estão "realmente" lá.

Então, dependendo de como você imprime os parâmetros no servidor, você pode acabar com a representação que nos mostrou.

    
por 20.05.2014 / 22:36