2010-02-01 15 views
13

J'utilise CURL pour vérifier l'existence d'une URL (requête HEAD) mais quand je la teste avec www.google.com, elle me redirige vers www.google.co.uk - probablement parce que mon serveur est basé au Royaume-Uni.Comment CURL www.google.com - il ne cesse de me rediriger vers .co.uk

Y a-t-il un moyen d'empêcher cela de se produire? Je ne souhaite pas supprimer l'option CURLOPT_FOLLOWLOCATION car cela est utile pour les redirections 301, etc.

Une partie de mon code est ci-dessous;

$ch = curl_init(); 

    // set URL and other appropriate options 
    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 
    curl_setopt($ch, CURLOPT_MAXREDIRS, 5); 
    curl_setopt($ch, CURLOPT_NOBODY, true); 
    curl_setopt($ch, CURLOPT_AUTOREFERER, true); 
    curl_setopt($ch, CURLOPT_FORBID_REUSE, true); 
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 4); 
    curl_setopt($ch, CURLOPT_TIMEOUT, 4); 

    $output = curl_exec($ch); 

    // get data  
$data = curl_getinfo($ch); 

$data['url'] contient www.google.co.uk quand je mets $url comme www.google.com

+2

@Webbo - Je sais que vous avez accepté la réponse de Tim, mais il y a un moyen de le faire (voir ma réponse). –

+0

Merci, vous apprenez quelque chose tous les jours! –

+2

Wow, ce site est génial, merci à tous! –

Répondre

13

Vous devez utiliser curl avec un cookie qui simule un comportement similaire dans un navigateur. Lorsque vous visitez google.com depuis l'Angleterre, il vous redirige vers google.co.uk, mais il y a un lien sur cette page intitulé "go google.com" qui vous permet de revenir sur google.com et d'y rester . Il utilise un cookie pour mémoriser les préférences de votre site.

Par exemple, voici les biscuits que j'ai après avoir fait cela (en utilisant Firefox):

alt text

+0

+1 pour le cookie qui vous ramène à google.com. Il doit maintenant déterminer quel cookie utiliser avec CURL. – FrustratedWithFormsDesigner

+0

Il peut utiliser les deux, n'est-ce pas? – Yoni

+0

Acclamations Yoni - votre réponse semble être plus directe! –

0

Vous pouvez utiliser www.google.co.uk directement, aucune différence. google.com/.net redirige toujours vers votre emplacement mais si vous utilisez un pays TLD comme .co.uk, il ne redirigera pas.

Il n'y a aucun moyen (connu pour moi) d'empêcher la redirection lors de l'utilisation de .com ou .net.

12

Essayez d'accéder à www.google.com/ncr, il va éviter la redirection vers le .co.uk (ou tout autre national) page.

+0

Génial, ce sera ma nouvelle page de démarrage. –

0

Une façon d'éviter que Google ne décide du pays dans lequel vous vous trouvez est de définir une adresse IP différente. Procurez-vous un des nombreux serveurs proxy américains du Web et faire quelque chose comme ceci:

$ch=curl_init(); 
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); 
curl_setopt($ch,CURLOPT_FOLLOWLOCTION,1); 
curl_setopt($ch,CURLOPT_PROXY,"8.12.33.159"); 
curl_setopt($ch,CURLOPT_PROXYPORT,"80"); 
curl_setopt($ch,CURLOPT_USERAGENT,"Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3"); 
curl_setopt($ch,CURLOPT_URL,$URI); 
$results=curl_exec($ch); 
curl_close($ch); 

De cette façon, Google pense que vous venez de former une adresse IP américaine et non rediriger vers un Google local.

0

Vous devez désactiver l'emplacement de suivi de boucle (valeur false) et vous ne serez pas redirigé plus ...

 
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false); 
4

Une autre option est d'utiliser simplement encrypted.google.com. Cela ne redirigera pas.