Fonte: Gleisson Assis
É através de sockets que podemos estabelecer comunicações com servidores enviando e recebendo dados, e como de costume, precisamos enviar informações as quais o protocolo usado possa entender e efetuar suas ações. Nesta parte não entraremos muito a fundo. Mas ótimos tutorias podem ser encontrados em www.faqs.org.
Vamos elaborar um script que nos retorne o conteúdo de uma página (usando o protocolo HTTP) e o cabeçalho que o servidor nos envia.
Para começarmos precisamos criar um identificador com o qual faremos trabalhar as demais funções relacionadas, seria algo como iniciar uma conexão com um banco de dados qualquer ou iniciar algum trabalho com arquivos, criamos esse identificador com a função fsockopen. Exemplo:
<?
$sock = fsockopen("localhost",80,$errorno,$error,30);
?>
Bom você deve ter percebido mas é bom comentar que na função fsockopen recebeu cinco parâmetros, sendo que apenas o dois primeiros seriam necessários, estudemo-los então:
<?
$sock = fsockopen("localhost",8000,$errorno,$error,30);
if(!$sock){
echo "Houve um erro: $error ($errorno)";
}
?>
Se você já sabe usar as funções relacionadas
a arquivos ficará feliz em saber que os passos que seguirão
serão efetuados da mesma maneira.
O envio de dados é realizado com funções de escrita
em arquivos e a leitura da resposta do servidor é realizada
com as funções de leitura. Nesse ponto do tutorial é
bom você saber como fazer um requisição simples sob
o protocolo HTTP. Como foi relatado no início do tutorial,
essa parte não será estuda com detalhes, apenas superficialmente:
<?
$requisicao =
"GET /arquivo.txt HTTP/1.0
";
?>
Onde /arquivo.txt
é o arquivo que você deseja do servidor, podendo ser
apenas / o que resultará na página incial do site.
Após a elaboração da string de requisição devemos envia-la
ao servidor. Podemos fazê-lo com as funções fwrite
ou fputs. Usemos
a função fwrite que me
é comum:
<?
fwrite($sock,$requisicao);
?>
Após enviar a requisição do arquivo o servidor enviará uma respota, que pode ser o arquivo requerido ou alguma mensagem de erro, podemos lê-la com algum função de leitura de arquivo, usemos a função fgets:
<?
$resultado = fgets($sock,255);
while(!feof($sock)){
$resultado .= fgets($sock,255);
}
?>
Se você mandasse imprimir a variável resultado veria algumas informação que não fazem parte do corpo do documento, esse é um outro ponto que devemos destacar, o servidor lhe enviára um cabeçalho (informação como cookies, data de expiração e etc...) e após um sequencia de strings que em PHP representaríamos como rnrn o corpo da página, então nesse casa para separarmos esses dados podemos fazer uso da função split - que tem como objetivo retornar um array separando uma string por um delimitador informado - exemplo:
<?
$partes = split("
",$resultado,2);
$header = $partes[0];
$body = $partes[1];
?>
Agora que já realizamos o que queríamos podemos (e devemos) liberar o identificador criado com a função fsockopen, procederemos da mesma maneira ao fecharmos um arquivo:
<?
fclose($sock);
?>
O script completo pode ser escrito com as seguintes
linhas de código:
<?
$sock = fsockopen("localhost",80,$errorno,$error,30);
$requisicao = "GET / HTTP/1.0
";
fwrite($sock,$requisicao);
$resultado = fgets(
$sock,255);
while(!feof($sock)){
$resultado .= fgets($sock,255);
}
$partes = split("
",$resultado,2);
$header =
$partes[0];
$body = $partes[1];
echo $header;
fclose($sock);
?>
Andre Simoes
Bem, estou com um problema...
Eu copiei o exemplo e não consegui fazer...
Bem... eu tenho que fazer um pegador de emails...
e eu preciso ir a um site pegar no código algumas informações..
como faço isso?
Aparelho será lançado junto com Nokia N85, mas em 2010 poderá ser vendido separadamente.
Valores promocionais serão mantidos até quando durarem os estoques.
2001 - iMasters FFPA Informática Ltda - Todos os direitos reservados.