• Nenhum resultado encontrado

CGI Common Gateway Interface. É um standard para transmitir dados entre um servidor web e uma aplicação externa

N/A
N/A
Protected

Academic year: 2021

Share "CGI Common Gateway Interface. É um standard para transmitir dados entre um servidor web e uma aplicação externa"

Copied!
15
0
0

Texto

(1)

CGI – Common Gateway Interface

É um standard para transmitir

dados entre um servidor web e

uma aplicação externa

Uma aplicação CGI é um programa

que gera em tempo real um

documento (normalmente HTML)

que devolve ao servidor web

Logo, um programa CGI gera

páginas web dinâmicas

Um programa CGI pode ser escrito

em várias linguagens:

o

C/C++

o

PERL

o

Python

o

Any Unix shell (bash, csh, etc)

o

Visual Basic (ASP)

o

AppleScript

o

PHP

(2)

Especificação

O servidor e a aplicação

comunicam de três formas:

o

Variáveis de ambiente

o

Standard input (stdin)

o

Standard output (stdout)

(3)

Variáveis de ambiente

SERVER_SOFTWARE

SERVER_NAME

GATEWAY_INTERFACE

SERVER_PROTOCOL

SERVER_PORT

REQUEST_METHOD

PATH_INFO

PATH_TRANSLATED

SCRIPT_NAME

QUERY_STRING

REMOTE_HOST

REMOTE_ADDR

AUTH_TYPE

REMOTE_USER

REMOTE_IDENT

CONTENT_TYPE

CONTENT_LENGTH

HTTP_

(4)

Comunicação standard out

Exemplo:

http://www.deei.fct.ualg.pt/~figo/cgi-bin/hello.pl

$cat hello.pl #!/usr/bin/perl

# Required header that tells the browser how to render the text. print "Content-type:text/html\n";

print "\n"

print "<html>\n<head>\n<title>Test Page</title>\n</head>\n"; print "<body>\n";

print "<h2>Hello, world!</h2>\n"; print "</body>\n</html>\n";

(5)

Observações

Por razões de segurança a aplicação CGI apenas pode

correr a partir de um directório específico definido na

configuração do servidor web (exemplo cgi-bin)

A aplicação é responsável por enviar para STDOUT um

documento HTTP:

Imprimir resposta do servidor (exemplo HTTP/1.1 200

Document follows) - opcional

Imprimir cabeçalhos para stdout – opcional

Imprimir linha em branco para separar cabeçalhos dos

dados

(6)

GET form e variáveis de ambiente

Exemplo

http://www.deei.fct.ualg.pt/~figo/getform.html?sample_text=

ola+ca+estou+eu

$cat getform.html

<html> <head> <title>Print Environment</title> </head> <body>

<form action="cgi-bin/env.pl" method="GET"> Enter some text here:

<input type="text" name="sample_text" size=30 /> <input type="submit" />

</form> </body> </html>

(7)

$cat cgi-bin/env.pl

#!/usr/bin/perl print "Content-type:text/html\n\n"; print <<EndOfHTML; <html><head><title>Print Environment</title></head> <body> EndOfHTML

foreach $key (sort(keys %ENV)) {

print "$key = $ENV{$key}<br>\n"; }

(8)

DOCUMENT_ROOT = /var/www GATEWAY_INTERFACE = CGI/1.1 HTTP_ACCEPT = text/xml,application/xml,application/xh tml+xml,text/html;q=0.9,text/plain;q=0. 8,image/png,*/*;q=0.5 HTTP_ACCEPT_CHARSET = ISO-8859-1,utf-8;q=0.7,*;q=0.7 HTTP_ACCEPT_ENCODING = gzip,deflate HTTP_ACCEPT_LANGUAGE = en-us,en;q=0.5 HTTP_CACHE_CONTROL = max-age=259200 HTTP_CONNECTION = keep-alive HTTP_COOKIE = MOODLEID_=%25E9%25CE%251F_%25A7r%25A3 HTTP_HOST = www.deei.fct.ualg.pt HTTP_KEEP_ALIVE = 300 HTTP_REFERER = http://www.deei.fct.ualg.pt/~figo/getfo rm.html HTTP_USER_AGENT = Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.0.9)

Gecko/20061206 Firefox/1.5.0.9 HTTP_VIA = 1.1 proxy1.si.ualg.pt:8080 (squid/2.5.STABLE12) HTTP_X_FORWARDED_FOR = 10.10.23.124 PATH = /usr/local/bin:/usr/bin:/bin QUERY_STRING = sample_text=ola+ca+estou+eu REMOTE_ADDR = 193.136.225.10 REMOTE_PORT = 50379 REQUEST_METHOD = GET REQUEST_URI = /~figo/cgi-bin/env.pl?sample_text=ola+ca+estou+eu

(9)

SCRIPT_FILENAME = /users/figo/public_html/cgi-bin/env.pl SCRIPT_NAME = /~figo/cgi-bin/env.pl SERVER_ADDR = 10.10.23.13 SERVER_ADMIN = [email protected] SERVER_NAME = www.deei.fct.ualg.pt SERVER_PORT = 80 SERVER_PROTOCOL = HTTP/1.0

SERVER_SOFTWARE = Apache/1.3.33 (Debian GNU/Linux) PHP/4.3.10-16 mod_ssl/2.8.22 OpenSSL/0.9.7e mod_python/2.7.10

Python/2.3.4

(10)

Observações

Quando se utiliza uma GET form

os dados introduzidos ficam

disponiveis à aplicação na variável

de ambiente

QUERY_STRING

Os cabeçalhos enviados pelo

browser estão disponiveis nas

variaveis de ambiente que

começam por

HTTP_

O método GET está identificado na

variavel de ambiente

(11)

POST form e standard in

Exemplo

http://www.deei.fct.ualg.pt/~figo/postform.html

$cat postform.html

<html><head><title>Print Environment</title></head> <body>

<form action="cgi-bin/post.pl" method="POST"> Enter some text here: <input type="text" name="sample_text" size=30><input type="submit"><p> </form>

(12)

$cat cgi-bin/post.pl

#!/usr/bin/perl print "Content-type:text/html\n\n"; print <<EndOfHTML; <html><head><title>Print Environment</title></head><body> EndOfHTML

print "<h2>Environment variables:</h2>\n";

foreach $key (sort(keys %ENV)) {

print "$key = $ENV{$key}<br>\n"; }

read(STDIN,$in,$ENV{'CONTENT_LENGTH'});

print "<h2>standard input STDIN:</h2>\n"; print "$in\n";

(13)

Environment variables:

CONTENT_LENGTH = 33 CONTENT_TYPE = application/x-www-form-urlencoded DOCUMENT_ROOT = /var/www GATEWAY_INTERFACE = CGI/1.1 HTTP_ACCEPT = text/xml,application/xml,application/xh tml+xml,text/html;q=0.9,text/plain;q=0. 8,image/png,*/*;q=0.5 HTTP_ACCEPT_CHARSET = ISO-8859-1,utf-8;q=0.7,*;q=0.7 HTTP_ACCEPT_ENCODING = gzip,deflate HTTP_ACCEPT_LANGUAGE = en-us,en;q=0.5 HTTP_CACHE_CONTROL = max-age=259200 HTTP_CONNECTION = keep-alive HTTP_COOKIE = MOODLEID_=%25E9%25CE%251F_%25A7r%25A3 HTTP_HOST = www.deei.fct.ualg.pt HTTP_KEEP_ALIVE = 300 HTTP_REFERER = http://www.deei.fct.ualg.pt/~figo/postf orm.html HTTP_USER_AGENT = Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.0.9)

Gecko/20061206 Firefox/1.5.0.9 HTTP_VIA = 1.1 proxy1.si.ualg.pt:8080 (squid/2.5.STABLE12) HTTP_X_FORWARDED_FOR = 10.10.23.124 PATH = /usr/local/bin:/usr/bin:/bin QUERY_STRING =

(14)

REMOTE_PORT = 37161 REQUEST_METHOD = POST REQUEST_URI = /~figo/cgi-bin/post.pl SCRIPT_FILENAME = /users/figo/public_html/cgi-bin/post.pl SCRIPT_NAME = /~figo/cgi-bin/post.pl SERVER_ADDR = 10.10.23.13 SERVER_ADMIN = [email protected] SERVER_NAME = www.deei.fct.ualg.pt SERVER_PORT = 80 SERVER_PROTOCOL = HTTP/1.0

SERVER_SOFTWARE = Apache/1.3.33 (Debian GNU/Linux) PHP/4.3.10-16 mod_ssl/2.8.22 OpenSSL/0.9.7e mod_python/2.7.10

Python/2.3.4

UNIQUE_ID = RdSaeAoKFw0AADyLS@Q

standard input STDIN:

(15)

Observações

Dados obtidos pelo método POST

encontram-se acessíveis através

do STDIN

Quando se utiliza um POST a

variável de ambiente

QUERY_STRING

está vazia

Os cabeçalhos enviados pelo

browser estão disponiveis nas

variaveis de ambiente que

começam por

HTTP_

O método POST está identificado

na variavel de ambiente

Referências

Documentos relacionados

Elaboração de uma Cartilha Direcionada aos Profissionais da Área da Saúde, Contendo Informações sobre Interações Medicamentosas Envolvendo Fitoterápicos e Alopáticos

É perceptível, desta forma, o constante aumento do aprofundamento dos personagens: os “príncipes” têm agora não só nome e falas, mas personalidades bem desenvolvidas,

Conversely, defensive actions performed in the defensive midfield were significantly more frequent (e=3.48) than defensive actions performed in the offensive midfield

O técnico de farmácia tem um papel indispensável na dispensa de medicamentos e outros produtos de saúde, sendo que tem o dever de assegurar que o doente recebe

socioeconômicas da população (CUNHA, 2005, p. 15), registra que apesar de alguns senões, o censo demográfico ainda é “o principal instrumento para obter dados sobre

A segurança da proteção jurídica consiste no fornecimento de benefícios, através de meios jurídicos e financeiros para atender as necessidades, para chegar a uma

O processo metodológico adotado para o presente estudo buscou alinhar os tópicos abordados na revisão bibliográfica e o procedimento a ser adotado para seleção das regiões de

4 — Inscrição do montante necessário ao pagamento da subvenção estatal para a campanha das eleições legislati- vas de 2011 (€ 7 668 000) e aos pagamentos ainda a efec- tuar