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
Artigos PHP Como ler uma web page ou um web service com PHP
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.
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){
(strlen($postData)>0)? $method="POST" : $method="GET" ;
fwrite($fp, "$method $filepath$getData HTTP/1.1\r\n");
if(strlen($postData)>0){
if(strlen($userAgent)>0) fwrite($fp, "User-agent: $userAgent\r\n");
$txt .= fgets($fp, $bytes);
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.