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
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
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
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.
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.
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.
Tags windows windows-10 curl