A sintaxe do Curl POST funciona no Windows?

3

Estou tentando emitir o seguinte comando no Windows 10:

D:\>curl -i -X POST -H "Content-Type:application/json" -d '{  "firstName" : "Frodo",  "lastName" : "Baggins" }' http://localhost:8080/people

Infelizmente, produz vários erros:

curl: (6) Could not resolve host: firstName
curl: (7) Failed to connect to  port 80: Connection refused
curl: (6) Could not resolve host: Frodo,
curl: (6) Could not resolve host: lastName
curl: (7) Failed to connect to  port 80: Connection refused
curl: (6) Could not resolve host: Baggins
curl: (3) [globbing] unmatched close brace/bracket in column 1

Aparentemente, não entende a sintaxe.

Por que e como corrigir?

D:\>curl --version
curl 7.46.0 (x86_64-pc-win32) libcurl/7.46.0 OpenSSL/1.0.2e zlib/1.2.8 WinIDN libssh2/1.6.0
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp scp sftp smtp smtps telnet tftp
Features: AsynchDNS IDN IPv6 Largefile SSPI Kerberos SPNEGO NTLM SSL libz
    
por Dims 22.12.2015 / 12:24

4 respostas

3

Outra opção é mascarar doublequotes com backslash assim:

curl -i -X POST -H "Content-Type:application/json" -d "{\"firstName\": \"Frodo\",  \"lastName\" : \"Baggins\" }" http://localhost:8080/people
    
por 28.11.2016 / 10:26
1

O problema é o seu argumento -d com aspas duplas como argumento. Você precisa cercá-lo entre aspas e escapar das aspas duplas no interior.

Você deve ser capaz de fazer:

curl -i -X POST -H "Content-Type:application/json" -d "{  ^"firstName^" : ^"Frodo^",  ^"lastName^" : ^"Baggins^" }" http://localhost:8080/people

Pessoalmente, eu os colocaria em um arquivo, depois usaria -d @filename para clareza.

    
por 22.12.2015 / 12:37
1

Parece que você está usando cmd.exe . As regras que escapam do Prompt de Comando são arcaicas e terríveis. Eu recomendo usar o Powershell; ele usa regras muito mais parecidas com as de bash em outras shells * nix (embora não sejam idênticas, notadamente porque ele usa '(backtick) como o caractere de escape em vez de barra invertida).

Aqui está o comando no Powershell no meu sistema:

& 'C:\Program Files\Git\mingw64\bin\curl' -i -X POST -H "Content-Type:application/json" -d '{  "firstName" : "Frodo",  "lastName" : "Baggins" }' http://localhost:8080/people

O & é necessário porque o caminho para o programa é uma string entre aspas. Eu tive que especificar o caminho, porque eu não tenho um curl.exe no meu Windows PATH . No entanto, eu poderia simplesmente escapar do espaço em "Arquivos de Programas":

C:\Program' Files\Git\mingw64\bin\curl -i -X POST -H "Content-Type:application/json" -d '{  "firstName" : "Frodo",  "lastName" : "Baggins" }' http://localhost:8080/people

Aspas simples e duplas funcionam quando você as usa, com o ' delimitando o início de uma string e o " aparecendo apenas como caracteres literais dentro dela.

Note que você faz tem que fornecer o caminho para um executável curl , ou pelo menos especificar curl.exe ; curl por si só é um alias do Powershell para o cmdlet Invoke-WebRequest , que pode fazer a maior parte do que o programa cURL pode fazer, mas tem uma sintaxe de argumento muito diferente.

Além disso, enquanto você pode chamar o Powershell de cmd usando powershell -c <command> , isso não ajudaria muito aqui, porque você teria que escapar da string usando a sintaxe boba de cmd de qualquer maneira.

Outra opção é apenas usar o Windows subsistema para Linux (WSL), que permite executar programas Linux (incluindo as versões padrão do Ubuntu de bash e curl ) diretamente no Windows, sem necessidade de reinicialização de VM ou reinicialização. Detalhes completos sobre isso podem ser encontrados no link , mas a versão curta é tentar executar bash (ou bash.exe ) de qualquer Prompt de Comando ou da janela Powershell, e ele instalará o subsistema Linux ou, pelo menos, informará como.

    
por 22.04.2017 / 19:11
0

Outra solução no Windows é usar o bash do Cygwin. Eu tive o mesmo problema, com o bash funciona para mim.

Para o Windows 10, o suporte a aplicativos Linux incorporado também pode manipular aspas simples.

    
por 22.04.2017 / 18:30