Como ler uma web page ou um web service com PHP

Veja neste artigo como estabelecer uma conexão com uma web page ou web service e retornar o seu conteúdo através de socket

Nesse artigo vou mostrar uma função que age como proxy.

Para isso vamos usar uma função network do PHP, o fsockopen. http://www.php.net/manual/pt_BR/function.fsockopen.php

Com essa função podemos abrir uma conexão de internet com alguma página ou web service, através da maquina que está executando-a e retornar o conteúdo desse documento

O fsockopen recebe os seguintes parâmetros:

hostname - Nome do servidor para o qual você quer que o fsockopen estabelaça uma conexão. Se você compilou com suporte a OpenSSL, você pode colocar os prefixos ssl:// ou tls:// no hostname para utilizar SSL ou uma conexão cliente TLS sobre TCP/IP para conectar com o host remoto. (Ver listagem 1).

Listagem 1. Exemplo de como configurar o hostname

//CONEXÃO SEM SSL $fp = fsockopen(“www.seusite.com.br”, port, errno, errstr, timeout); //CONEXÃO COM SSL $fp = fsockopen(“ssl://www.seusite.com.br”, port, errno, errstr, timeout);

port - Recebe o número da porta de acesso do site que você está tentando estabelecer a conexão. (Ver listagem 2).

Listagem 2. Exemplo de como configurar o parâmetro port

//CONEXÃO ATRAVÉS DA PORTA 80 $fp = fsockopen(hostname, 80, errno, errstr, timeout); //CONEXÃO ATRAVÉS DA PORTA 8080 $fp = fsockopen(hostname, 8080, errno, errstr, timeout);

errno - Se informado, essa variável, guarda o número do erro que aconteceu caso não consiga estabelecer a conexão.

Se o valor retornado em errno é 0 e a função retornou FALSE, é um indicativo que o erro aconteceu antes da chamada de connect(). É bem provável que isso aconteça por um problema de inicialização de socket.

errstr - Similar ao parâmetro errno, mas retorna a mensagem de erro como string.

timeout - Timeout de conexão, em segundos.

Obs: Se você precisa de um timeout para ler/escrever dados através do socket, use stream_set_timeout(), já que o parâmetro timeout de fsockopen() somente é aplicado enquanto o socket está conectando.

Vejamos então a função para estabelecer uma conexão com uma página ou web service. (Ver listagem 3)

Listagem 3. Função para estabelecer uma conexão via socket

function getXmlHttp($hostname, $port, $timeout, $filepath="", $getData="", $postData="", $userAgent="", $bytes=1024){ $fp = fsockopen($hostname, $port, $errno, $errstr, $timeout); if (!$fp) { fclose($fp); return "$errstr ($errno)<br />\n"; } else { (strlen($postData)>0)? $method="POST" : $method="GET" ; fwrite($fp, "$method $filepath$getData HTTP/1.1\r\n"); fwrite($fp, "Host: $hostname\r\n"); if(strlen($postData)>0){ fwrite($fp, "Content-Type: application/x-www-form-urlencoded\r\n"); fwrite($fp, "Content-Length: ".strlen($postData)."\r\n"); } if(strlen($userAgent)>0) fwrite($fp, "User-agent: $userAgent\r\n"); fwrite($fp, "Connection: close\r\n\r\n"); fwrite($fp, $postData); $txt=""; while (!feof($fp)) { $txt .= fgets($fp, $bytes); } fclose($fp); return $txt; } }

Essa função aceita os parâmetros hostname, port e timeout já citados a cima e também outros parâmetros adicionais que veremos a seguir.

filepath - Nessa variável você mapeia a página que você quer acessar.

ex.: "/imagens/meme.html"

getData - Nessa variável você indica se quer enviar alguma querystring para essa página

ex.: “?id=123&nome=Gregory&bla=xpto” …

Obs.: na querystring é importante não se esquecer de colocar o ponto de interrogação no início da string.

postData - Nessa variável você indica se quer enviar algum conteúdo através do método POST. Diferentemente do parâmetro getData, não é necessário colocar o ponto de interrogação no inicio da string

userAgent - Essa váriável apesar de não ser necessária, serve para indicar para a página que você está querendo acessar se você está acessando com o navegador chrome, firefox ou ie, etc. (Ver listagem 4)

Listagem 4. Exemplos de user agent strings

//EXEMPLO DE USER AGENT STRING PARA O CHROME $userAgent="Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.142 Safari/535.19"; //EXEMPLO DE USER AGENT STRING PARA O FIREFOX $userAgent="Mozilla/5.0 (Windows NT 6.1; rv:11.0) Gecko/20100101 Firefox/11.0"; //EXEMPLO DE USER AGENT STRING PARA O INTERNET EXPLORER 9 $userAgent="Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)"; //EXEMPLO DE USER AGENT STRING PARA O OPERA $userAgent="Opera/9.80 (Windows NT 6.1; U; pt-BR) Presto/2.10.229 Version/11.62";

bytes - usado na função fgets do PHP que retorna uma linha do ponteiro do arquivo. Se a maioria das linhas do arquivo for maior que 8 KB então é recomendável usar um comprimento de linha especificado por esse parâmetro bytes.

Veja na listagem 5 como usar a função e na figura 1 o resultado.

Listagem 5. Exemplo de como usar a função

$hostname="www.google.com.br"; $port=80; $timeout=30; $filepath="/"; $txt = getXmlHttp($hostname,$port,$timeout,$filepath); $pos = strrpos($txt, "close\r\n\r\n")+strlen("close\r\n\r\n"); $txt = substr($txt,$pos,strlen($txt)); echo $txt;

Figura 1. Resultado da conexão via socked para o site do google

Fico por aqui e bons códigos.

Ebook exclusivo
Dê um upgrade no início da sua jornada. Crie sua conta grátis e baixe o e-book

Artigos relacionados