Pular para o conteúdo

Três formas de executar HTTP Request em Shell Script

Dica publicada em Shell Script / Introdução
Perfil removido removido
Hits: 43.331 Categoria: Shell Script Subcategoria: Introdução
  • Indicar
  • Impressora
  • Denunciar
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

Três formas de executar HTTP Request em Shell Script

Irei demonstrar três formas diferentes de obter o conteúdo de uma página WEB usando Shell Script.

1ª Forma

A primeira delas é usando o Wget, segue o comando abaixo:

wget localhost -O - -q

Caso queira, você pode guardar a saída do comando em uma variável, da seguinte maneira:

body=$(wget localhost -O - -q)

2ª Forma

A segunda forma é usando o curl, é tão simples quanto o Wget:

curl localhost

3ª Forma

A terceira forma é usando o /dev/tcp. É um arquivo do sistema que permite que você interaja diretamente com o protocolo TCP.

A sintaxe básica para fazer uma conexão é: /dev/tcp/ → host → / → porta

Como estamos fazendo um HTTP Request, e a porta padrão de servidores HTTP é a 80, nosso comando ficará da seguinte maneira:

exec 5<>/dev/tcp/localhost/80
$ echo -e "GET / HTTP/1.0\n" >&5
$ cat <&5


Diferente dos outros dois comandos vistos anteriormente, além de ser exibida a source da página, os headers da resposta recebida também serão visíveis na saída do comando.

Os comandos acima foram só um exemplo básico sobre como fazer um simples HTTP Request (GET).

É possível definir os headers do request, por exemplo, user-agent, cookies, fazer post request, entre outros.

Vejam os exemplos abaixo:

Post request usando o comando curl:

cat /var/www/exemplo.php
 <? print_r($_POST); ?>
   
   
curl -F campo1=valor -F campo2=outro-valor localhost/exemplo.php
 Array
 (
     [campo1] => valor
     [campo2] => outro-valor
 )
   
   
Caso queira upar um arquivo da máquina local, é só colocar um @ seguido do nome do arquivo. Exemplo:

curl -F file=@/etc/issue -F enviar=sim site.yyy/upload.php

Definindo user-agent usando o Wget:

cat /var/www/teste1.php
 <?php
     print $_SERVER['HTTP_USER_AGENT']."\n";
 ?>
  
  
wget --user-agent="TESTE-AGENT" localhost/teste1.php -qO -
 TESTE-AGENT
   
   
Definindo "referer" usando o /dev/tcp:

request='GET /referer.php HTTP/1.0
 > Host: localhost
 > Accept: text/css,*/*;q=0.1
 > Referer: http://abcdefghi.uuu.yy
 >
 > '
   
   
exec 5<>/dev/tcp/localhost/80
$ echo -e "$request" >&5
$ cat <&5
 HTTP/1.1 200 OK
 Date: Wed, 13 Nov 2013 22:32:02 GMT
 Server: Apache/2.2.14 (Ubuntu)
 X-Powered-By: PHP/5.3.2-1ubuntu4.9
 Vary: Accept-Encoding
 Content-Length: 24
 Connection: close
 Content-Type: text/html
   
 http://abcdefghi.uuu.yy
   
   

Conclusão

Os comandos wget e curl têm muitos parâmetros, por isso, não abordei todos eles. Caso queira saber mais sobre eles, a solução está aí embaixo:

man curl
$ man wget


Usando o /dev/tcp corretamente, é possível fazer qualquer tipo de HTTP Request, por isso, considero a melhor opção :D, mas não a mais prática. A mais prática realmente, é o comando curl.


Espero que tenha sido útil para alguém.
Escrito por MMxM.

O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

Webcam do MP10 "nokla" E71 no Ubuntu 9.10

GUFW não abre no Ubuntu 16.04 LTS [RESOLVIDO]

Problemas no teclado no KDE

Linux - seu programa não funciona? Use o terminal!

Lubuntu 14.04 - Erro: Ícone conexões de rede [Corrigido]

Scpript para limpar os logs

Diversão no terminal com cowsay e fortunes

SSH (PuTTY) automatico pelo Windows

Shell - Encontrando erros

Limpando lixeira centralizada do Samba

#1 Comentário enviado por vitinho217 em 29/05/2014 - 12:10h
Boa explicação, é possível conectar-se em uma máquina através do /dev/tcp ?
#2 Comentário enviado por VonNatur em 24/04/2016 - 04:26h
Interessante fazer a requisição via /dev/tcp !

Att,

Herberson S. Miranda
Twitter: @__von
Website: http://0fx66.com/
OpenPGP: 0x66F9A5F0
Skype: h.s.miranda
#3 Comentário enviado por TKratos em 06/12/2016 - 13:10h
Não sei se estou no lugar certo, mas gostaria de criar um script onde vai executar uma ação se determinada porta não estiver em uso (resumidamente).

Estou tentando mas não consegui ainda.. só falta isso. Se alguém poder ajudar...

Contribuir com comentário

Entre na sua conta para comentar.