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 ?
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á.
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.
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>
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
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.
curl -v --data-ascii var=value http://example.com
e há muitas mais opções, verifique curl --help
para mais informações.
Se você é preguiçoso, você pode obter google-chrome ou firefox para fazer todo o trabalho para você.
Chrome copiará todos os dados do pedido em sintaxe cURL.
Chrome utiliza --data 'param1=hello¶m2=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"