sudo apt-get install curl(Linux)
brew install curl (Mac)
https://www.cygwin.com/ (Windows)
http://onlinecurl.com/ Online
Uma requisição cURL é composta da palavra curl, da URL a qual você quer acessar, e um conjunto de opções que permitem você modificar qualquer coisa na requisição que será enviada.
-H: H é um atalho para Header. Essa opção permite adicionar ou substituir campos do cabeçalho HTTP.
Exemplo: -H "Content-Type: application/json"
-d: É um atalho para data. É esta opção que vamos usar quando queremos enviar dados para o servidor.
Exemplo com um payload JSON: -d ’{"name":"Jackson Pires"}’
-i, -include: Quando usamos esta opção, o cURL não mostrará apenas o corpo da resposta enviada do servidor, mas também o cabeçalho/HEADER.
-I, -head: Esta opção diz ao cURL para fazer uma requisição do tipo HEAD que irá trazer apenas o cabeçalho do documento sem o corpo.
-X, -request: Esta opção especifica qual o verbo HTTP que queremos usar. O padrão é o GET mas nós podemos usar também o POST, PUT, PATCH ou DELETE.
curl --help
Fake Online REST API for Testing and Prototyping.
Nossa primeira requisição com o cURL
curl -i https://jsonplaceholder.typicode.com/posts/1
curl -o /dev/null -s -w "%{http_code}\n" -H "Content-Type: application/json" -X PUT http://localhost:8080/100
curl -i https://jsonplaceholder.typicode.com/posts/1
O que o cURL mostra como resposta de uma requisição HTTP pode ser dividido em 4 partes:
1- Start-Line (Linha de início / Obrigatória)
2- Header Fields (Cabeçalho de Campos / Pode ter 0 ou mais)
3- Empty Line (Linha em branco / Obrigatória)
4 - Message-Body (Corpo da mensagem / Opcional)
Apesar de todas as requisições terem respostas diferentes, pelo menos a linha inicial e a linha em branco existirão.
A Start-Line pode ser dividida em duas partes, Request-Line e Status-Line, onde, na imagem, HTTP/1.1 é a Request-Line que indica a versão do HTTP que foi usada, e o 200 OK que é a Status-Line representando que houve uma resposta.
Os Header Fields representam os metadados da requisição e resposta HTTP.
Eles contém informações sobre como a transferência dos dados deve ser manipulada.
Nesta resposta podemos notar alguns header fields, como por exemplo:
-
Content-Type: Informa como a representação é serializada.
-
Content-Length: Informa o tamanho do corpo da mensagem e é indicado em octetos.
-
X-Powered-By: Header Fields não oficiais, por convenção começam com um X. No entanto essa prática está em desuso pois existem diversos Header Fields oficiais e devemos tentar usá-los antes de criar algum.
https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers
Mesmo assim, ao se criar um novo Header, atualmente, indica-se não começar mais com o X.
http://stackoverflow.com/questions/3561381/custom-http-headers-naming-conventions
A linha em branco serve apenas para delimitar o fim dos Header Fields e o início do corpo da mensagem.
O corpo da mensagem contém os dados que foram enviados do servidor em resposta à requisição feita. Nesse caso temos hm JSON.
Uma outra forma de fazer uma requisição é usando a opção -v, que faz com que o resultado seja mais verboso, mostrando de fato como ocorreu a requisição.
curl -v -i https://jsonplaceholder.typicode.com/posts/1
Veja Metódos HTTP
Além do cURL existe hoje no mercado outras ferramentas que podem auxiliar na tarefa de fazer requisições e analisar as respostas do servidor. Existem duas delas que são bem conhecidas, o HTTPie e o Postman.