Qual é a sintaxe da linha de comando cURL para fazer uma solicitação POST?


Respostas:


2542

Com campos:

curl --data "param1=value1&param2=value2" https://example.com/resource.cgi

Com campos especificados individualmente:

curl --data "param1=value1" --data "param2=value2" https://example.com/resource.cgi

Multipart:

curl --form "[email protected]" https://example.com/resource.cgi

Multipart com campos e um nome de arquivo:

curl --form "[email protected];filename=desired-filename.txt" --form param1=value1 --form param2=value2 https://example.com/resource.cgi

Sem dados:

curl --data '' https://example.com/resource.cgi

curl -X POST https://example.com/resource.cgi

curl --request POST https://example.com/resource.cgi

Para mais informações, consulte o manual cURL . O tutorial cURL sobre como emular um navegador da Web é útil.

Com a libcurl, use a curl_formadd()função para criar seu formulário antes de enviá-lo da maneira usual. Veja a documentação da libcurl para mais informações.

Para arquivos grandes, considere adicionar parâmetros para mostrar o progresso do upload:

curl --tr-encoding -X POST -v -# -o output -T filename.dat \
  http://example.com/resource.cgi

A -o outputé necessária, caso contrário nenhuma barra de progresso aparecerá.


7
@LauriRanta --data-urlencode(no dash), pelo menos nas versões recentes
waitinforatrain 12/02/2013

4
Também funciona se você precisa atualizar um recurso com um PUT: Onda PUT -X ...
Subfuzion

3
Estou tendo problemas para entender ... quando eu faria isso With Fields, quando Multiparte quando Without Data?
CodyBugstein 21/09/2014

7
Em vez de --datavocê pode usar -d.
user35538

Eu tenho uma matriz de campos. como posso fazer isso?
ARUNBALAN NV 9/16

507

Para um POST HTTP RESTful que contém XML:

curl -X POST -d @filename.txt http://example.com/path/to/resource --header "Content-Type:text/xml"

ou para JSON, use isto:

curl -X POST -d @filename.txt http://example.com/path/to/resource --header "Content-Type:application/json"

Isso lerá o conteúdo do arquivo nomeado filename.txte o enviará como a solicitação de postagem.


13
@ explicação do tom-wijsman: curl -X POSTimplica uma solicitação HTTP POST, o -dparâmetro (versão longa :) --datainforma ao curl que o que se segue serão parâmetros POST e @filenamedesigna o conteúdo do arquivo filenamecomo parâmetro. Essa abordagem funciona melhor com as APIs HTTP RESTful encontradas no Twitter, no Facebook, em vários outros serviços da Web, incluindo Ruby on Rails, bem como nas APIs HTTP de bancos de dados, como o CouchDB. RESTO significa transferência de estado representacional
soundmonster

1
Como podemos ver a resposta xml não em uma linha, mas formatada?
Vitaly Zdanevich 29/07

6
Eu acho que você pode deixar de lado o -X POSTque está implícito -d.
benjifisher

Como dar vários cabeçalhos?
Chave

Vários cabeçalhos: curl -H "header2: 1" -H "header2: 2" ...
Tomáš Kratochvíla

131

Dados do stdin com -d @-

Exemplo:

echo '{"text": "Hello **world**!"}' | curl -d @- https://api.github.com/markdown

Resultado:

<p>Hello <strong>world</strong>!</p>

6
Ótimo se você já tem um objeto JSON na área de transferência
Luca Steeb

ainda melhor: echo "$ message" | curl -H "Tipo de conteúdo: application / json" -d @ - "$ url"
rzr 8/17/17

66
curl -d "name=Rafael%20Sagula&phone=3320780" http://www.where.com/guest.cgi 

é o exemplo encontrado no manual de exemplo de ondulação .

Use% 26 para oe comercial, se o acima não funcionar:

curl -d "name=Rafael%20Sagula%26phone=3320780" http://www.where.com/guest.cgi 

61

Se você deseja fazer login em um site, faça o seguinte:

curl -d "username=admin&password=admin&submit=Login" --dump-header headers http://localhost/Login
curl -L -b headers http://localhost/

A primeira solicitação salva o cookie da sessão (fornecido após o login bem-sucedido) no arquivo "headers". A partir de agora, você pode usar esse cookie para autenticar você em qualquer parte do site que você costuma acessar após fazer login com um navegador.


6
uma observação da página de manual do curl: 'A opção -c, --cookie-jar é, no entanto, uma maneira melhor de armazenar cookies.'
maxschlepzig

32
curl -v --data-ascii var=value http://example.com

e há muito mais opções, verifique curl --helppara obter mais informações.


27

Se você é preguiçoso, pode fazer com que o google-chrome faça todo o trabalho por você.

  1. Clique com o botão direito do mouse no formulário que você deseja enviar e selecione Inspecionar . Isso abrirá o painel do DevTools.
  2. Marque a guia Rede no devtools e marque a caixa de seleção Preservar log .
  3. Envie o formulário e localize a entrada com o método POST (clique com o botão direito do mouse em qualquer cabeçalho da coluna e verifique se o Método está marcado).
  4. Clique com o botão direito do mouse na linha com POST e selecione Copiar > Copiar como cURL .

chrome devtools: copie como cURL

O Chrome copiará todos os dados da solicitação na sintaxe cURL.

O Chrome usa --data 'param1=hello&param2=world'que você pode tornar mais legível usando um único parâmetro -dou -Fpor parâmetro, dependendo do tipo de solicitação POST que você deseja enviar, que pode ser uma application/x-www-form-urlencodedou de multipart/form-dataacordo.

Isso será postado como application/x-www-form-urlencoded( usado para a maioria dos formulários que não contêm uploads de arquivos ):

curl http://httpbin.org/post \
    -H "User-Agent: Mozilla/2.2" \
    -d param1=hello \
    -d name=dinsdale

Para multipart/form-datauso em POST -F( normalmente usado com formulários que contêm uploads de arquivos, ou onde a ordem dos campos é importante ou onde vários campos com o mesmo nome são necessários ):

curl http://httpbin.org/post \
    -H "User-Agent: Mozilla/2.2" \
    -F param1=hello \
    -F name=dinsdale \
    -F name=piranha

O User-Agentcabeçalho não é normalmente necessário, mas eu tenho jogado em apenas no caso. Você pode evitar a necessidade de definir o agente do usuário em cada solicitação, criando o ~/.curlrcarquivo que contém, por exemplo,User-Agent: "Mozilla/2.2"

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.