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


Como posso fazer uma POSTAR pedido com o ondulação ferramenta de linha de comando?


2055


origem




Respostas:


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

Multiparte:

curl --form "fileupload=@my-file.txt" https://example.com/resource.cgi

Multipartes com campos e um nome de arquivo:

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, veja o manual cURL. o tutorial cURL sobre como emular um navegador da web é útil.

Com libcurl, use o curl_formadd() função para construir o seu formulário antes de enviá-lo da maneira usual. Veja o documentação do libcurl Para maiores 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 será exibida.


2385



@LauriRanta --data-urlencode (sem traço), em versões recentes, pelo menos - waitinforatrain
Também funciona se você precisar atualizar um recurso com um PUT: curl -X PUT ... - Subfuzion
Estou tendo problemas para entender ... quando eu faria isso? With Fields, quando com Multipart e quando Without Data? - CodyBugstein
Ao invés de --data você pode usar -d. - user35538
Eu tenho uma matriz de campos. como posso fazer isso? - ARUNBALAN NV


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 JSON, use isto:

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

Isto irá ler o conteúdo do arquivo chamado filename.txt e enviá-lo como o pedido de postagem.


480



@ explicação tom-wijsman: curl -X POST implica uma solicitação HTTP POST, o -d parâmetro (versão longa: --data) informa que o que se segue serão parâmetros POST, e @filename designa o conteúdo do arquivo filename como parâmetro. Essa abordagem funciona melhor com APIs HTTP RESTful, como encontradas no Twitter, Facebook, vários outros serviços da Web, incluindo Ruby on Rails, bem como APIs HTTP de bancos de dados, como o CouchDB. REST significa Transferência de estado representacional - soundmonster
Como podemos ver a resposta xml não em uma linha, mas formatada? - Vitaly Zdanevich
Eu acho que você pode deixar de fora -X POST desde que isso é implícito por -d. - benjifisher
Como dar vários cabeçalhos? - keya
Cabeçalhos Múltiplos: curl -H "header2: 1" -H "header2: 2" ... - Tomáš Kratochvíla


Dados do stdin: usar -d @-. Exemplo:

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

Saída:

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

118



Ótimo se você já tiver um objeto JSON na área de transferência - Luca Steeb
melhor ainda: echo "$ message" | Curl -H "Tipo de conteúdo: aplicativo / json" -d @ - "$ url" - rzr


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

é o exemplo encontrado no Manual de Curl Example.

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

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

64





Se você quiser 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 de sessão (fornecido após o login bem-sucedido) no arquivo "headers". De agora em diante, você pode usar esse cookie para autenticá-lo em qualquer parte do site que você normalmente acessa depois de fazer login com um navegador.


57



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


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

e há muitas outras opções, confira curl --help Para maiores informações.


31





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

  1. Clique com o botão direito no formulário que você deseja enviar e selecione Inspecionar. Isso abrirá o painel DevTools.
  2. Selecione os Rede guia em devtools e marque o Preservar log caixa de seleção.
  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 certifique-se de Método está checado).
  4. Clique com o botão direito na linha com POST e selecione cópia de > Copiar como cURL.

chrome devtools: copy as cURL

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

Usos do Chrome --data 'param1=hello&param2=world' que você pode tornar mais legível usando um único -d ou -F por parâmetro, dependendo do tipo de solicitação POST que você deseja enviar, que pode ser application/x-www-form-urlencoded ou multipart/form-data adequadamente.

Este será publicado 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-data Uso 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-Agent cabeçalho normalmente não é necessário, mas eu joguei isso apenas no caso. Você pode evitar ter que configurar o agente do usuário em todas as solicitações, criando o ~/.curlrc arquivo que contém e. User-Agent: "Mozilla/2.2"


16