Três formas de executar HTTP Request em Shell Script
Dica publicada em Shell Script / Introdução
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.
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)
curl localhost
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
curl -F file=@/etc/issue -F enviar=sim site.yyy/upload.php
Definindo user-agent usando o Wget:
cat /var/www/teste1.php
request='GET /referer.php HTTP/1.0
$ echo -e "$request" >&5
$ cat <&5
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.
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-AGENTDefinindo "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.