Skip to content

Instantly share code, notes, and snippets.

@renatoapcosta
Last active August 12, 2018 23:26
Show Gist options
  • Save renatoapcosta/ed1706e982a05c088b2c7de9add8e48a to your computer and use it in GitHub Desktop.
Save renatoapcosta/ed1706e982a05c088b2c7de9add8e48a to your computer and use it in GitHub Desktop.
Curl

Curl

Instalando

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.

Algumas opções

-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

Testando

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

Analisando uma resposta HTTP

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.

screen shot 2018-08-12 at 19 07 49

1 - Start-Line

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.

screen shot 2018-08-12 at 19 08 36

2 - Header Fields

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

screen shot 2018-08-12 at 19 09 28

3 - Empty Line

A linha em branco serve apenas para delimitar o fim dos Header Fields e o início do corpo da mensagem.

screen shot 2018-08-12 at 19 14 11

4 - Message-Body

O corpo da mensagem contém os dados que foram enviados do servidor em resposta à requisição feita. Nesse caso temos hm JSON.

screen shot 2018-08-12 at 19 15 47

Outra forma

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

Outras ferramentas

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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment