Capturar dados de uma página Web com file_get_contents()

314 views
Skip to first unread message

Carlos Martins

unread,
Aug 13, 2013, 3:00:22 PM8/13/13
to Grupo PHP-MySQL-BR, Lista PHPBR, PHP Avançado, phpri...@googlegroups.com
Boa tarde galera.

Estou com o seguinte problema:

Quando eu preciso capturar alguma página web eu utilizo o file_get_contents(), trato com expressão regular e pego os dados que eu preciso. Até aí tudo bem.

O problema agora é o seguinte. Eu preciso acessar uma página de relatórios que está protegida. Ou seja eu preciso fazer logon em uma página de login, depois clicar em um link e aí ter acesso a página que contém o relatório. 
O login e a senha eu possuo. 
Ou seja só não sei como eu chego na página que eu quero com o file_get_contents() já que eu não posso colocar a url da página de relatórios direto porque preciso passar pela página de login primeiro.

Alguma sugestão?

Agradeço a todos pela a atenção.

Att.

Carlos Martins

Willen Goulart

unread,
Aug 13, 2013, 3:07:21 PM8/13/13
to phpav...@googlegroups.com, Grupo PHP-MySQL-BR, Lista PHPBR, phpri...@googlegroups.com
file_get_contents aceita cookie? você pode se logar, e usar o cookie para manter a sessão aberta.

Nesse caso acho melhor usar cURL

Willen José Gomes Coelho Goulart
--------------------------------------------------------
   PHP Programmer
   Web-Designer
   Cel: 6453-6511
   Pessoal: willen....@gmail.com
   Corporativo: wil...@gwd-web.com.br


2013/8/13 Carlos Martins <csmart...@gmail.com>

--
--
Você recebeu esta mensagem porque está inscrito no Google Groups "PHP Avançado".
Para postar nesse grupo, envie e-mail phpav...@googlegroups.com
Para cancelar a sua inscrição neste grupo, envie um e-mail para phpavancado...@googlegroups.com
Para mais opções, visitem este grupo em http://groups.google.com.br/group/phpavancado
Tudo sobre php: http://www.phpavancado.net/
Documentação PHP: www.php.net
 
---
Você está recebendo esta mensagem porque se inscreveu no grupo "PHP Avançado" dos Grupos do Google.
Para cancelar a inscrição neste grupo e parar de receber seus e-mails, envie um e-mail para phpavancado...@googlegroups.com.
Para obter mais opções, acesse https://groups.google.com/groups/opt_out.
 
 

Joubert

unread,
Aug 13, 2013, 4:56:33 PM8/13/13
to phpav...@googlegroups.com
Se possível, tente com curl, ele tem opções para http login

Guilherme Messias de Oliveira

unread,
Sep 11, 2013, 12:21:35 PM9/11/13
to phpav...@googlegroups.com
Fala Carlos,
Segue trecho e um código meu para adiantar seu lado.

Este script tem por finalidade pegar seus amigos do face.
Salvar em um diretório.
Depois um outro robo lê os diretórios pega os amigos dos seus amigos e o processo continua.
<?php
$ch = curl_init();

/*Aqui você coloca a url que quer buscar*/
curl_setopt($ch, CURLOPT_URL, 'https://facebook.com/login.php?&next=https://www.facebook.com/'.$obj->nome_usuario.'/friends');

/*Aqui entram os dados de acesso */
curl_setopt($ch, CURLOPT_POSTFIELDS,'email='.urlencode($user_email).'&pass='.urlencode($user_pass).'&login=Login');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
/* Cria um arquivo de nome cookie em formato txt no diretório onde vai rodar o script*/
curl_setopt($ch, CURLOPT_COOKIEJAR, "cookie.txt");
curl_setopt($ch, CURLOPT_COOKIEFILE, "cookie.txt");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0);

/* Se quiser salvar o resultado em um arquivo txt por exemplo caso contrário é só comentar*/
curl_setopt($ch, CURLOPT_FILE, $fp);

/*Esta parte é importante. Passar um User Agent para simular uma navegação via browser*/
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3");
$output = curl_exec($ch);
?>

Caso não tenha Curl ou a validação seja mais simples uma saída é adaptar o script abaixo.
E

<?php


$context = stream_context_create();
$result = stream_context_set_option($context, 'ssl', 'verify_host', true);
$result = stream_context_set_option($context, 'ssl', 'allow_self_signed', true);
$request_data = http_build_query(array('email'=>'login de acesso','pass'=>'senha'));

$header = "POST /login.php HTTP/1.1\r\n";
$header .= "Host: login.facebook.com\r\n";
$header .= "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.3a) Gecko/20021207\r\n";
$header .= "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n";
$header .= "Accept-Charset: windows-1256,utf-8;q=0.7,*;q=0.7\r\n";
$header .= "Accept-Language: ar,en-us;q=0.7,en;q=0.3\r\n";
$header .= "Content-Type: application/x-www-form-urlencoded\r\n";
$header .= "Cookie: test_cookie=1\r\n";
$header .= "Content-Length: ".strlen($request_data)."\r\n";
$header .= "Connection: close\r\n\r\n";
   $fp = stream_socket_client("ssl://facebook.com/login.php:443", $err, $errstr, 60, STREAM_CLIENT_CONNECT, $context);

    if (!$fp) {
        trigger_error('Erro de Conexão : '.$errstr);
        return NULL;
      }
    echo "<b>Estamos dentro papito...</b><br/>"; flush(); ob_flush();
    echo "<b> Enviando Requisição de Login</b><br/>"; flush(); ob_flush();

    fputs($fp, $header);
      $site = fputs($fp, $request_data);
    echo $site;   
?>
Espero ter ajudado.
Att,
--
Guilherme Messias de Oliveira.
Gerente de Projetos e Desenvolvimento Web nas plataformas Magento, Joomla e Wordpress. 
cel.11 96789-2389
Guilherme Messias de Oliveira.
Gerente de Projetos e Desenvolvimento Web nas plataformas Magento, Joomla e Wordpress. 
cel. 6789-2389
 

Carlos Martins

unread,
Sep 15, 2013, 5:37:27 PM9/15/13
to PHP Avançado
Valew mesmo galera e Guilherme. 

Consegui implantar o que eu queria. 
Guilherme usei o seu exemplo com o curl e funcionou perfeitamene. Valew mesmo cara.

Um abração a todos e uma ótima semana.

Att.

Carlos Martins

Guilherme Messias de Oliveira

unread,
Sep 16, 2013, 5:17:48 PM9/16/13
to phpav...@googlegroups.com
Maravilha Carlos,
Fico feliz em ter podido ajudar.
Forte abraço.

Márcio Mello Garrido

unread,
Feb 15, 2016, 6:23:52 AM2/15/16
to PHP Avançado
Bom dia amigo,

Estou precisando de um script que capture dados de um site em especifico, tentei adaptar o que vcs estavam falando mas estou um pouco enrolado!
Podem me dar uma luz por favor?
Desde Já obrigado.

Abs.
Márcio Mello
Reply all
Reply to author
Forward
0 new messages