我如何CURL www.google.com - 它一直将我重定向到.co.uk

时间:2010-02-01 14:21:44

标签: php curl dns libcurl

我正在使用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 个答案:

答案 0 :(得分:13)

您需要将curl与在浏览器中模拟类似行为的cookie一起使用。

当您从英格兰访问google.com时,它会将您重定向到google.co.uk,但是该页面上有一个标题为“go go google.com”的链接,可让您返回google.com并留在那里。它使用cookie来记住您的网站偏好。

例如,以下是我执行此操作后使用的cookie(使用firefox):

alt text

答案 1 :(得分:12)

尝试访问www.google.com/ncr,它将避免重定向到.co.uk(或任何其他国家/地区)页面。

答案 2 :(得分:4)

另一种选择是使用encrypted.google.com。这不会重定向。

答案 3 :(得分:1)

有点黑客,但使用IP地址怎么样? http://216.239.59.147/ http://66.102.7.104/

答案 4 :(得分:0)

您可以直接使用www.google.co.uk,没有区别。 google.com/.net始终重定向到您的位置,但如果您使用像.co.uk这样的国家/地区TLD,则不会重定向。

使用.com或.net。

时,无法(我知道)阻止重定向

答案 5 :(得分:0)

避免Google决定您所在的国家/地区的一种方法是设置不同的IP地址。只需从Web获取众多美国代理服务器中的一个,并执行以下操作:

$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。

答案 6 :(得分:0)

您应该从curl关闭跟随位置(将其设置为false),您将不再被重定向...

   curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);