Três formas de executar HTTP Request em Shell Script

Publicado por Perfil removido em 20/11/2013

[ Hits: 39.925 ]

 


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.

Outras dicas deste autor

Vídeo aula: Trabalhando no Inkscape

Protocolo de gateway redundante VRRP, a escolha certa para interoperabilidade da sua rede Cisco

Debian GNU/Linux-Libre - Sem softwares proprietários

Rodando o Hamachi como serviço no Linux

Debian 6.x e CentOS 6.x - Instalando módulo para chipset Realtek RTL8111/8168B

Leitura recomendada

Script básico para ouvir MP3 aleatórias

Procura e apaga arquivos com X dias

Como excluir um determinado kernel no Ubuntu

diff - Comando com exemplos

Comando para envio de dados via console para outro console

  

Comentários
[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




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts