web-dev-qa-db-fra.com

cURL, récupère l'URL de redirection vers une variable

J'utilise curl pour remplir un formulaire. Une fois la publication terminée, l'autre script qui gère le formulaire est redirigé vers une autre URL. Je veux obtenir cette URL de redirection dans une variable.

25
Vamsi Krishna B

Vous utiliseriez

curl_setopt($CURL, CURLOPT_HEADER, TRUE);

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

33
RobertPitt

Un moyen facile de trouver l'URL redirigée (si vous ne voulez pas savoir à l'avance)

$last_url = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL);
43
EGL 2-101

Ici, j'obtiens les en-têtes http de la ressource, puis j'analyse les en-têtes dans un tableau $ retVal. J'ai obtenu 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 en 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
nico limpika

Vous souhaiterez peut-être définir la valeur CURLOPT_FOLLOWLOCATION sur true.

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

3
Delta