Как мне CURL www.google.com - он продолжает перенаправлять меня на .co.uk - PullRequest
13 голосов
/ 01 февраля 2010

Я использую CURL для проверки существования URL (запрос HEAD), но когда я проверяю его с помощью www.google.com, он перенаправляет меня на www.google.co.uk - возможно, потому что мой сервер находится в Великобритании.

Есть ли способ, которым вы можете остановить это? Я не хочу удалять опцию CURLOPT_FOLLOWLOCATION, поскольку это полезно для перенаправлений 301 и т. Д.

Часть моего кода ниже;

$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'] содержит www.google.co.uk, когда я задаю $url как www.google.com

Ответы [ 7 ]

13 голосов
/ 01 февраля 2010

Вам необходимо использовать curl с cookie-файлом, имитирующим аналогичное поведение в браузере.

Когда вы посещаете google.com из Англии, он перенаправляет вас на google.co.uk, однако на этой странице есть ссылка под названием «Перейти на google.com», которая позволяет вам вернуться на google.com и остаться там. Он использует куки для запоминания настроек вашего сайта.

Например, вот файлы cookie, которые у меня есть после этого (с использованием Firefox):

alt text

12 голосов
/ 01 февраля 2010

Попробуйте получить доступ к www.google.com/ncr, это позволит избежать перенаправления на страницу .co.uk (или любую другую национальную).

4 голосов
/ 07 ноября 2012

Другой вариант - использовать просто encrypted.google.com. Это не будет перенаправлять.

1 голос
/ 01 февраля 2010

Немного хак, но как насчет использования IP-адреса? http://216.239.59.147/ http://66.102.7.104/

0 голосов
/ 25 ноября 2010

Вы должны отключить следующее местоположение от curl (установить его на false), и вы больше не будете перенаправлены ...

   curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);
0 голосов
/ 12 июля 2010

Один из способов не дать Google решить, в какой стране вы находитесь, - установить другой IP-адрес. Просто возьмите один из многих прокси-серверов США из Интернета и сделайте что-то вроде этого:

$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);

Таким образом, Google будет думать, что вы пришли с американского IP-адреса, а не перенаправили на местный Google.

0 голосов
/ 01 февраля 2010

Вы можете использовать www.google.co.uk напрямую, без разницы. google.com/.net всегда перенаправляет на ваше местоположение, но если вы используете домен верхнего уровня, например .co.uk, он не будет перенаправлять.

Нет способа (известного мне) предотвратить перенаправление при использовании .com или .net.

...