2008-09-17 15:39:01 +0000 2008-09-17 15:39:01 +0000
2240
2240

Qual é a sintaxe da linha de comando cURL para fazer um pedido POST?

Como posso fazer um pedido POST com a ferramenta de linha de comando cURL ?

Respostas (7)

2607
2607
2607
2008-09-17 15:43:28 +0000

Com campos:

curl --data "param1=value1¶m2=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 "fileupload=@my-file.txt" https://example.com/resource.cgi

Multipart com campos e um nome de ficheiro:

curl --form "fileupload=@my-file.txt;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 ver o manual cURL . O cURL tutorial emulando um web browser é útil.

Com a libcurl, use a função curl_formadd() para construir o seu formulário antes de o submeter da forma usual. Veja a documentação 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

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

517
517
517
2011-03-10 08:29:31 +0000

Para um POST HTTP RESTful contendo XML:

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

ou para o JSON, utilize este:

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

Isto irá ler o conteúdo do ficheiro com o nome filename.txt e enviá-lo como pedido postal.

137
137
137
2014-03-25 19:35:44 +0000

Dados da stdin com -d @-

Exemplo:

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

Saída:

<p>Hello <strong>world</strong>!</p>
69
69
69
2008-09-17 15:42:15 +0000
curl -d "name=Rafael%20Sagula&phone=3320780" http://www.where.com/guest.cgi

é o exemplo encontrado no Curl Example Manual .

Utilize %26 para os amplificadores, embora se o acima indicado não funcionar:

curl -d "name=Rafael%20Sagula%26phone=3320780" http://www.where.com/guest.cgi
63
63
63
2012-03-04 02:21:37 +0000

Se quiser aceder a 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/

O primeiro pedido guarda o cookie da sessão (que é fornecido após o login bem sucedido) no ficheiro “headers”. A partir de agora pode utilizar esse cookie para o autenticar em qualquer parte do site a que normalmente acede depois de iniciar sessão com um browser.

35
35
35
2008-09-17 15:43:02 +0000
curl -v --data-ascii var=value http://example.com

e há muitas mais opções, verifique curl --help para mais informações.

33
33
33
2017-09-29 08:06:57 +0000

Se você é preguiçoso, você pode obter google-chrome ou firefox para fazer todo o trabalho para você.

  1. Clique com o botão direito do rato no formulário que pretende submeter e seleccione Inspect (ou Inspect Element* para Firefox). Isto irá abrir o painel DevTools.
  2. Seleccione o separador Network* em Devtools e assinale a caixa de verificação Preserve log ( Persist Logs* para Firefox).
  3. Enviar o formulário e localizar a entrada com o método POST (clique com o botão direito do rato em qualquer cabeçalho de coluna e certifique-se de que Método é verificado).
  4. Clique com o botão direito do rato na linha com POST e seleccione Copy* > Copy como cURL*.

Chrome copiará todos os dados do pedido em sintaxe cURL.

Chrome utiliza --data 'param1=hello&param2=world' que pode tornar mais legível utilizando um único -d ou -F por parâmetro, dependendo do tipo de pedido POST que pretende enviar, que pode ser ou application/x-www-form-urlencoded ou multipart/form-data em conformidade.

Este será o application/x-www-form-urlencoded (utilizado para a maioria dos formulários que não contêm upload de ficheiros):

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

Para um multipart/form-data POST use -F (typically used with forms that contain file uploads, or where order of fields is important, or where multiple fields with the same name are required):

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

O cabeçalho User-Agent não é normalmente necessário, mas já o atirei por precaução. Se precisar de um agente personalizado, então pode evitar defini-lo em cada pedido, criando o ficheiro ~/.curlrc que contém, por exemplo, User-Agent: "Mozilla/2.2"