cURL , get redirect url to a variable cURL , get redirect url to a variable curl curl

cURL , get redirect url to a variable


Easy way to find the redirected url (if you don't want to know in advance)

$last_url = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL);


You would use

curl_setopt($CURL, CURLOPT_HEADER, TRUE);

And parse the headers for the location header


Here I get the resource http headers then I parse the headers out into an array $retVal. I got the code for parsing the headers from here (http://www.bhootnath.in/blog/2010/10/parse-http-headers-in-php/) You could also use http://php.net/manual/en/function.http-parse-headers.php if you have (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 outecho '<pre>';print_r($retVal);echo '</pre>';//here is the redirectif (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);