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