13

我正在使用 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当我设置$urlwww.google.com

4

7 回答 7

13

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

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

例如,这是我在执行此操作后拥有的 cookie(使用 Firefox):

替代文字

于 2010-02-01T14:26:14.907 回答
12

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

于 2010-02-01T14:27:30.170 回答
4

另一种选择是使用简单的 encrypted.google.com。那不会重定向。

于 2012-11-07T09:36:19.507 回答
1

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

于 2010-02-01T14:27:46.580 回答
0

您可以直接使用 www.google.co.uk,没有区别。google.com/.net 始终重定向到您的位置,但如果您使用 .co.uk 之类的国家顶级域名,它不会重定向。

使用 .com 或 .net 时,没有办法(我知道)阻止重定向。

于 2010-02-01T14:24:58.113 回答
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。

于 2010-07-12T13:46:13.703 回答
0

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

   curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);
于 2010-11-24T23:50:04.663 回答