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.
Vous utiliseriez
curl_setopt($CURL, CURLOPT_HEADER, TRUE);
Et analyser les en-têtes de l'en-tête location
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);
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);
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.