segunda-feira, 12 de novembro de 2012

Programa PHP se comportando como navegador web

Precisava puxar dados de um site, mas era preciso passar pela seleção de diversos parâmetros que são salvos na sessão até que o usuário veja o resultado.
O que fiz foi um fopen, que no exemplo abaixo é feito através de um proxy, peguei o cabeçalho da resposta com o stream_get_meta_data e dentro wrapper_data e busquei pelo comando 'Set-Cookie'. Peguei a string com o Set-Cookie do jeito que veio e coloquei no header das requisições seguintes.

$uf = $_REQUEST['u'];
$mun = $_REQUEST['m'];
if(!$mun || !$uf)
{
    die("m (nome municipio) ou u (sigla UF) nao foi passado.");
}

$authProxy = base64_encode("<proxy_user>:
<proxy_passwd>");
// Création des options de la requête
$opts = array(
   'http' => array (
       'method'=>'GET',
       'proxy'=>'tcp://
<proxy_addr>:<proxy_port>',
       'request_fulluri' => true,
       'header'=>"Proxy-Authorization: Basic $authProxy"
   )
);
// Création du contexte de transaction
$ctx = stream_context_create($opts);

$u = "http://www.obid.senad.gov.br/portais/OBID/conteudo/web/instituicao/index.php?campo_atuacao%5B%5D=st_prevencao&btn_proximo=Proxima+%3E%3E";
$h = fopen($u, 'r', false, $ctx);

$m = stream_get_meta_data($h);

foreach($m['wrapper_data'] as $wd)
{
    if(strpos($wd, 'Set-Cookie') !== false)
    {
        $ck = str_replace('Set-Cookie', 'Cookie', $wd);
    }
}

$opts = array(
   'http' => array (
    'method'=>'GET',
    'proxy'=>'tcp://
<proxy_addr>:<proxy_port>',
    'request_fulluri' => true,
    'header'=>"Proxy-Authorization: Basic $authProxy\r\n" .
        $ck . "\r\n"
   )
);
// Création du contexte de transaction
$ctx = stream_context_create($opts);
$u = "http://www.obid.senad.gov.br/portais/OBID/conteudo/web/instituicao/index.php?ds_estado=" . $uf;
$h = fopen($u, 'r', false, $ctx);

$m = stream_get_meta_data($h);

foreach($m['wrapper_data'] as $wd)
{
    if(strpos($wd, 'Set-Cookie') !== false)
    {
        $ck = str_replace('Set-Cookie', 'Cookie', $wd);
    }
}

$opts = array(
   'http' => array (
    'method'=>'GET',
    'proxy'=>'tcp://
<proxy_addr>:<proxy_port>',
    'request_fulluri' => true,
    'header'=>"Proxy-Authorization: Basic $authProxy\r\n" .
        $ck . "\r\n"
   )
);
// Création du contexte de transaction
$ctx = stream_context_create($opts);

$u = "http://www.obid.senad.gov.br/portais/OBID/conteudo/web/instituicao/index.php?ds_cidade=" . $mun;
$r = file_get_contents($u, false, $ctx);


$r = substr($r, strpos($r, '<ul class="imp">'), strrpos($r, '</ul>'));

print_r($r);

Nenhum comentário:

Postar um comentário