Un problema molto difficile

di il
1 risposte

Un problema molto difficile

Il mio problema e' il seguente (mi hanno chiesto di risolverlo):

devo simulare con Curl il passaggio (e quindi la ricezione dei dati inviati dal server)
dalla pagina http://www1.agenziaentrate.it/servizi/tassazioneattigiudiziari/registrazione.htm?passo=0
(si seleziona "Ufficio Finanziario" a ABBIATEGRASSO e cliccando su Avanti ) a http://www1.agenziaentrate.it/servizi/tassazioneattigiudiziari/registrazione.htm?passo=1 (dopo aver cliccato per l'appunto AVANTI dalla pagina precedente).

Non sono riuscito a simulare questo passaggio,ho provato di tutto,dalla fsockopen tradizionale a $Snoopy fino a Curl.

Ecco il codice php dell'ultimo test fatto con Curl,se qualcuno riesce a capire il problema...


Ad ogni modo,credo che sia quasi impossibile simulare il passaggio con il curl del php,perche' quello che ricevo e' sempre l'html della pagina http://www1.agenziaentrate.it/servizi/tassazioneattigiudiziari/registrazione.htm?passo=0 e mai quello della pagina http://www1.agenziaentrate.it/servizi/tassazioneattigiudiziari/registrazione.htm?passo=1
che contiene i dati che mi interessano per l'ufficio finanziario ABBIATEGRASSO (ossia,quelli della pagina http://www1.agenziaentrate.it/servizi/tassazioneattigiudiziari/registrazione.htm?passo=1
che contiene i codici dell "Ente emittente").




<?php
session_start();

if (isset($_COOKIE[session_name()]))
{
setcookie(session_name(), '', time()-42000, '/');
}


setcookie("cookie.txt","miocookie");


define('POSTURL', 'http://www1.agenziaentrate.it/servizi/tassazioneattigiudiziari/registrazione.htm');

define('POSTURL2', 'http://www1.agenziaentrate.it/servizi/tassazioneattigiudiziari/registrazione.htm?action=scegliufficio');

define('POSTURL3', 'http://www1.agenziaentrate.it/servizi/tassazioneattigiudiziari/registrazione.htm?passo=1');

define('POSTURL4', 'http://www1.agenziaentrate.it/servizi/tassazioneattigiudiziari/registrazione.htm?passo=0');

//define('POSTVARS', 'avanti=Avanti'); // POST VARIABLES TO BE SENT (non visualizza nulla)

//define('POSTVARS', 'avanti=ABBIATEGRASSO'); // POST VARIABLES TO BE SENT (non visualizza nulla)

define('POSTVARS2', 'avanti=Avanti&ufficio=C555'); // visualizza sempre la pagina di passo=0

//echo ("test postvars=".POSTVARS);
//die;

// INITIALIZE ALL VARS

$ch='';
$Rec_Data='';
$ch2='';
$Rec_Data2='';


$ch = curl_init(POSTURL4);
curl_setopt($ch, CURLOPT_FORBID_REUSE, 0);
curl_setopt($ch, CURLOPT_FRESH_CONNECT, 0);
curl_setopt($ch, CURLOPT_POST ,1);
curl_setopt($ch, CURLOPT_POSTFIELDS ,POSTVARS2);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION ,1);
curl_setopt($ch, CURLOPT_HEADER ,1); // DO NOT RETURN HTTP HEADERS
curl_setopt($ch, CURLOPT_AUTOREFERER, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER ,1); // RETURN THE CONTENTS OF THE CALL
$Rec_Data = curl_exec($ch);
echo ("dopo la richiesta 3 .....".$Rec_Data);
// $Rec_Data = curl_exec($ch);



$testo = "PHPSESSID";
$pos = strripos($Rec_Data, $testo);

if ($pos === false)
{ //echo ("stringa PHPSESSID non trovata");
}
else
{ //echo ("stringa PHPSESSID trovata alla posizione numero".$pos);
$sessione=after($testo, $Rec_Data);
//echo (" valore trovato=".$valore);
define ('POSTVARS', 'PHPSESSID='.$sessione.'&ufficio=C55&avanti=Avanti');
echo ("POSTVARS=".POSTVARS);
$ch2 = curl_init(POSTURL3);
curl_setopt($ch2, CURLOPT_FORBID_REUSE, 0);
curl_setopt($ch2, CURLOPT_FRESH_CONNECT, 0);
curl_setopt($ch2, CURLOPT_POST ,1);
curl_setopt($ch2, CURLOPT_POSTFIELDS ,POSTVARS);
curl_setopt($ch2, CURLOPT_FOLLOWLOCATION ,1);
curl_setopt($ch2, CURLOPT_HEADER ,1); // DO NOT RETURN HTTP HEADERS
curl_setopt($ch2, CURLOPT_AUTOREFERER, true);
curl_setopt($ch2, CURLOPT_RETURNTRANSFER ,1); // RETURN THE CONTENTS OF THE CALL
$Rec_Data2 = curl_exec($ch).curl_exec($ch2);
$Rec_Data2 = str_replace('<option value=""></option>',' ',$Rec_Data2);


// $sessione=after($testo, $Rec_Data);
curl_setopt($ch2, CURLOPT_POSTFIELDS , $Rec_Data2);
$Rec_Data3 = curl_exec($ch2);

echo ("dopo exec".$Rec_Data3);
};




//echo ("dopo la richiesta 3 .....".$Rec_Data);

curl_close($ch);
curl_close($ch2);
session_destroy();

function after ($this, $inthat)
{
if (!is_bool(strripos($inthat, $this)))
return substr($inthat, strripos($inthat,$this)+strlen($this));
};

?>

1 Risposte

  • Re: Un problema molto difficile

    Problema risolto, ho tracciato il percorso scaricandomi un prodotto (in triala per 14 giorni) che fa il debugger http,in quattro e quattr'otto questo debugger http mi ha fornito tutti i passaggi per le get e le post cosi' non ho dovuto fare altro che ricostruirli nel programma php.

Devi accedere o registrarti per scrivere nel forum
1 risposte