cURL, obtenir rediriger l'url vers une variable

J'utilise actuellement curl pour remplir un formulaire,mais après l'achèvement du post, l'autre script qui gère le formulaire redirige vers une autre url, maintenant je veux obtenir l'url, pour laquelle le script redirige vers une variable.

Merci..

24
demandé sur Vamsi Krishna B 2010-10-31 13:56:00

4 réponses

Vous utiliseriez

curl_setopt($CURL, CURLOPT_HEADER, TRUE);

Et analysez les en-têtes de l'en-tête location

33
répondu RobertPitt 2010-10-31 11:03:25

Moyen Facile de trouver l'url redirigée (si vous ne voulez pas savoir à l'avance)

$last_url = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL);
37
répondu EGL 2-101 2015-10-03 09:04:43

Ici, j'obtiens les en-têtes http de la ressource puis j'analyse les en-têtes dans un tableau $retVal. J'ai le code pour analyser les en-têtes d'ici ( http://www.bhootnath.in/blog/2010/10/parse-http-headers-in-php/) Vous pouvez également utiliser http://php.net/manual/en/function.http-parse-headers.php Si vous avez (PECL pecl_http > = 0.10.0)

        $ch = curl_init();
        $timeout = 0;
        curl_setopt ($ch, CURLOPT_URL, $url);
        curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
        curl_setopt($ch, CURLOPT_HEADER, TRUE);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);
        // Getting binary data
        $header = curl_exec($ch);
        $retVal = array();
        $fields = explode("\r\n", preg_replace('/\x0D\x0A[\x09\x20]+/', ' ', $header));
        foreach( $fields as $field ) {
            if( preg_match('/([^:]+): (.+)/m', $field, $match) ) {
                $match[1] = preg_replace('/(?<=^|[\x09\x20\x2D])./e', 'strtoupper("\0")', strtolower(trim($match[1])));
                if( isset($retVal[$match[1]]) ) {
                    $retVal[$match[1]] = array($retVal[$match[1]], $match[2]);
                } else {
                    $retVal[$match[1]] = trim($match[2]);
                }
            }
        }
//here is the header info parsed out
echo '<pre>';
print_r($retVal);
echo '</pre>';
//here is the redirect
if (isset($retVal['Location'])){
     echo $retVal['Location'];
} else {
     //keep in mind that if it is a direct link to the image the location header will be missing
     echo $_GET[$urlKey];
}
curl_close($ch);
8
répondu nico limpika 2010-11-23 02:32:21

Vous pouvez définir CURLOPT_FOLLOWLOCATION sur true.

Ou définissez CURLOPT_HEADER sur true, puis utilisez regexp pour obtenir l'en-tête Location.

3
répondu Delta 2010-10-31 11:06:51