-
Problema con cURL
Ho un piccolo script che sfrutta la libreria cURL per ottenere l'indirizzo di un redirect, su un altro server funziona tutto a dovere, mentre su altervista no; l'url di partenza è http://dizionario-italiano.org/Speciale:PaginaCasuale e lo script su altervista continua a restituirmi come stirnga "Speciale:PaginaCasuale" al posto che la pagina random.
Nelle impostazioni del mio sito ho abilitato il "Collegamento esterno senza restrizioni".
EDIT: Ho sbagliato sezione, chiedo scusa e se gentilmente qualcuno può spostare il thread nella sezione più giusta.
Codice PHP:
<?php
header('Access-Control-Allow-Origin: *');
$limiter = 'http://dizionario-italiano.org/';
$ch = curl_init('http://dizionario-italiano.org/Speciale:PaginaCasuale');
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_exec($ch);
$url = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL);
$word = substr($url, stripos($url, $limiter)+strlen($limiter), strlen($url));
echo $word;
?>
-
Per come funzionano le connessioni verso l'esterno di Altervista è purtroppo il comportamento normale perché non segue le location e quindi le devi gestire manualmente. Quindi devi abilitare l'opzione CURLOPT_HEADER e poi identificare l'HTTP header "Location" e ripetere la richiesta con la nuova URL.
-
Grazie mille, ho risolto aggirando il problema come mi hai suggerito tu. C'è qualche post che spiega come mai altervista non segue le location?
-
No, non c'è. Comunque se hai fatto una funzione che aggira il problema puoi postarlo qui, magari torna utile anche a qualcun altro.
-
ecco qua lo script riscritto senza la FOLLOWLOCATION
Codice PHP:
<?php
header('Access-Control-Allow-Origin: *');
$url = 'http://dizionario-italiano.org/';
$ch = curl_init($url.'Speciale:PaginaCasuale');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, true);
$var = curl_exec($ch);
$matches = array();
if (preg_match("/Location: http:\/\/dizionario-italiano\.org\/(\S+)/i", $var, $matches)) {
echo $matches[1];
}
?>