Página Inicial > Unix > Dica de como usar Curl para fazer chamadas POST passando dados

Dica de como usar Curl para fazer chamadas POST passando dados

Curl é uma ferramenta de linha comando muito útil para executar requisições HTTP.

Vejo muita gente utilizar o Curl com requisições GET. Por exemplo:

curl http://prodis.net.br

Mas, como toda boa ferramenta de requisições HTTP, também é possível executar requisições POST enviando dados no corpo da requisição.

Vamos criar um exemplo utilizando um formulário HTML fictício que busca o CEP de um endereço.

<form method="post" action="http://prodis.net.br/cep/">
  Endereço: <input type="text" name="address" />
  Cidade: <input type="text" name="city" />
  Estado: <input type="text" name="state" />
  <input type="submit" value="Buscar" />
</form>

O formulário acima possui três campos textos para endereço, cidade e Estado. Então a chamada Curl para o endereço “Rua Legal, 42 - Jundiaí - SP” fica assim:

curl --data "address=Rua%20Legal,%2042&city=Jundiaí&state=SP" http://prodis.net.br/cep

Note que foi necessário encodar os parâmetros enviados. No exemplo, substituímos espaços por %20.

É possível solicitar para o próprio Curl encodar os parâmetros:

curl --data-urlencode "address=Rua Legal, 42&city=Jundiaí&state=SP" http://prodis.net.br/cep

Essas chamadas iram enviar o cabeçalho HTTP Content-Type: application/x-www-form-urlencoded.

Utilizando a opção –include ou -i será incluído o cabeçalho HTTP de resposta. Com a opção –verbose ou -v serão exibidos os cabeçalhos HTTP de requisição e de resposta.

Para a chamada Curl:
curl --data-urlencode --verbose "address=Rua Legal, 42&city=Jundiaí&state=SP" http://prodis.net.br/cep

A resposta será algo do tipo:
> POST /cep HTTP/1.1
> User-Agent: curl/7.19.7 (universal-apple-darwin10.0) libcurl/7.19.7 zlib/1.2.3
> Host: prodis.net.br
> Accept: */*
> Content-Length: 62
> Content-Type: application/x-www-form-urlencoded
>
< HTTP/1.1 404 Not Found
< Date: Tue, 24 May 2011 23:21:50 GMT
< Server: Apache
< X-Pingback: http://prodis.net.br/xmlrpc.php
< Expires: Wed, 11 Jan 1984 05:00:00 GMT
< Cache-Control: no-cache, must-revalidate, max-age=0
< Pragma: no-cache
< Last-Modified: Tue, 24 May 2011 23:21:50 GMT
< Connection: close
< Transfer-Encoding: chunked
< Content-Type: text/html; charset=UTF-8
<

Há muitas outras opções no Curl para executar requisições HTTP, como fazer upload de arquivos, enviar cookies, definir um User Agent, realizar autenticação HTTP, etc.

Veja aqui um tutorial que mostra como usar essas funcionalidades.


Unix , , ,

  1. 26, maio, 2011 em 00:29 | #1

    Obrigado pelo post, resolveu um problema que eu estava enfrentando.

  2. 12, setembro, 2013 em 08:54 | #2

    muito útil, valeu!

  3. Gabriel
    13, novembro, 2013 em 15:36 | #3

    Olá como eu posso usar o curl para fazer um post passando por um proxy interno testando apenas o usuário e senha da página.

    OBS: A página começa com http://xxxxx.com.br/xxxx e é redirecionada para https://wwww.dddd.com/cccc/kfkfkf

    VLW

  1. Nenhum trackback ainda.