Shell Script para WEB

Poucas pessoas sabem, que é possível usar Shell Script em servidores WEB através de CGI. Esse texto é uma pequena introdução, com alguns exemplos didáticos. Neste tutorial, eu usarei o servidor Apache, com todas as suas configurações padrões.

[ Hits: 19.524 ]

Por: Perfil removido em 09/04/2014


POST e GET / Exemplos finais



Pegando dados enviados via POST e GET

Quando trabalhamos com desenvolvimento WEB, é comum receber dados via POST e/ou GET. Começarei com o GET, para POST, é praticamente a mesma coisa, só muda mesmo quando se faz upload de arquivos.

Em bash script, a variável IFS funciona como uma função split. Colocamos o que será delimitado, a variável seguinte se transforma em um vetor. Depois, usando o laço for, podemos extrair os campos e valores respectivos enviados via GET:

d#!/bin/bash echo -e "\n"
IFS='=&'
GET=($QUERY_STRING)


for ((i=0; i<${#GET[@]}; i+=2))
do
    echo "${GET[@]:$i:1} = ${GET[@]:$i+1:1}"
done

Testando:

curl 'localhost/cgi-bin/tutorial.sh?teste=ffff&teste2=xxxxx'
 teste = ffff
 teste2 = xxxxx


Com POST, a única diferença é que não existe uma variável de ambiente com os valores. Para obter esses valores, basta o seguinte comando: read variavel

Os dados enviados via POST ficam em /dev/stdin, por isso, quando utilizamos o read, esses valores são obtidos. Feito isso, é só trocar o GET por POST:

#!/bin/bash
echo -e "\n"
read var
IFS='=&'
POST=($var)

for ((i=0; i<${#POST[@]}; i+=2))
do
    echo "${POST[@]:$i:1} = ${POST[@]:$i+1:1}"
done

Testando:

curl localhost/cgi-bin/tutorial.sh --data "autor=mmxm&blog=hc0der.blogspot.com"
 autor = mmxm
 blog = hc0der.blogspot.com


Exemplos finais

Alguns exemplos que podem ser úteis (hehe).

Redirecionamento, usando header:

#!/bin/bash

printf "Status: 302 Found\n"
printf "Location: http://hc0der.blogspot.com\n\n";

Testando:

curl localhost/cgi-bin/tutorial.sh -i
HTTP/1.1 302 Found
Date: Wed, 26 Mar 2014 00:01:08 GMT
Server: Apache/2.2.22 (Debian)
Location: http://hc0der.blogspot.com
Content-Length: 0
Content-Type: text/x-sh


Falso "404 not found":

#!/bin/bash

printf "Status: 404 Not Found\n\n"



Testando:

curl localhost/cgi-bin/tutorial.sh -i
HTTP/1.1 404 Not Found
Date: Wed, 26 Mar 2014 00:06:53 GMT
Server: Apache/2.2.22 (Debian)
Content-Length: 0
Content-Type: text/x-sh


Fazendo download de arquivos:

#!/bin/bash

arquivo_local=/etc/issue stat -c "Content-Length: %s" $arquivo_local # enviar tamanho do arquivo em bytes
printf "Content-Disposition: attachment; filename=$(basename $arquivo_local)\n"
printf "Content-Type: application/octet-stream\n\n"
cat $arquivo_local

Testando:

$ curl localhost/cgi-bin/tutorial.sh -i
HTTP/1.1 200 OK
Date: Wed, 26 Mar 2014 00:13:32 GMT
Server: Apache/2.2.22 (Debian)
Content-Disposition: attachment; filename=issue
Content-Length: 17
Vary: Accept-Encoding
Content-Type: application/octet-stream

nao te interessa


E, via browser:
Linux: Shell Script para WEB

Conclusão

Para uma introdução, está de bom tamanho. Bash Script é complicado, conhecendo bem as ferramentas do seu sistema, não há limites para o que você pode fazer =>.

Referências de pesquisas, aqui:
Artigo também publicado, em: MMxM 8l06: Shell-script para web

That's all folks!

Página anterior    

Páginas do artigo
   1. Iniciando / Variáveis de ambiente
   2. POST e GET / Exemplos finais
Outros artigos deste autor

Regulamentação das profissões na área de informática

Definição de hacker

Como fazer seu programa Kylix chamar uma aplicação externa

Netbook Positivo Mobo White 1020 com Mandriva

Um tour pelos programas de gravação de CD/DVD no Linux

Leitura recomendada

Programação com Shell Script

Introdução ao Shell Script

O que é Shell Script

Cansou do Konsole e GNOME-Terminal? Existem outros terminais, escolha o seu!

Backup automático em Shell Script

  
Comentários
[1] Comentário enviado por esdras_laroque em 22/04/2014 - 12:11h

Interessante.

Só não entendi porque você, no exemplo de POST, passou as variáveis com o parâmetro "--data" e não do modo como seria feito em um browser, seguindo o padrão do exemplo do GET: ?var=valor1&var2=valor2

Alguma restrição nesse sentido, para o POST ou poderia ser passado das duas formas ?

[2] Comentário enviado por removido em 22/04/2014 - 20:44h


[1] Comentário enviado por esdras_laroque em 22/04/2014 - 12:11h:

Interessante.

Só não entendi porque você, no exemplo de POST, passou as variáveis com o parâmetro "--data" e não do modo como seria feito em um browser, seguindo o padrão do exemplo do GET: ?var=valor1&amp;var2=valor2

Alguma restrição nesse sentido, para o POST ou poderia ser passado das duas formas ?


Porque usando o curl , quando se quer enviar parâmetros via POST é assim que se faz , agora parâmetros GET são enviados diretamente pela url , por isso a diferença , entendeu ?


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts