Php &引用;检查谷歌中的位置;脚本与“工作”;谷歌网站“;但不是",;google.pl";-我的服务器被禁止了吗?

Php &引用;检查谷歌中的位置;脚本与“工作”;谷歌网站“;但不是",;google.pl";-我的服务器被禁止了吗?,php,google-search,Php,Google Search,我已经根据在谷歌上找到的一段代码编写了一个PHP脚本。它的目的是检查特定网站在谷歌的位置,给定一个特定的关键字。首先,它准备了一个合适的URL来查询Google(比如:http://www.google.com/search?q=使用+关键字&ie=utf-8&oe=utf-8&num=50”),然后下载位于之前准备的URL的站点源。之后,它使用正则表达式计算位置,并了解谷歌在搜索结果时使用的div类 当我要下载的URL位于“google.com”域时,脚本工作正常。但由于我认为它是为了检查波兰

我已经根据在谷歌上找到的一段代码编写了一个PHP脚本。它的目的是检查特定网站在谷歌的位置,给定一个特定的关键字。首先,它准备了一个合适的URL来查询Google(比如:http://www.google.com/search?q=使用+关键字&ie=utf-8&oe=utf-8&num=50”),然后下载位于之前准备的URL的站点源。之后,它使用正则表达式计算位置,并了解谷歌在搜索结果时使用的div类

当我要下载的URL位于“google.com”域时,脚本工作正常。但由于我认为它是为了检查波兰人的位置,我希望它使用“google.pl”。我不在乎,但搜索结果在两者之间确实会有所不同(甚至超过100个不同的位置)。不幸的是,当我尝试使用“pl”域时,cURL没有返回任何内容(它首先等待超时)。然而,当我在另一台服务器上运行我的脚本时,它在“google.com”和“google.pl”域上都能完美地工作。你知道为什么会发生这样的事吗?是否有可能我的服务器被禁止查询“google.pl”域

这里是我的cURL代码:

private function cURL($url)
{
    $ch = curl_init($url);
    curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
    curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,5);
    return curl_exec($ch);
    curl_close($ch);  
}

首先,我不能重现你的问题。我使用了以下3个cURL命令来模拟您的情况:

curl -A "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_2) AppleWebKit/534.51.5 (KHTML, like Gecko) Version/5.1 Safari/534.51.3" http://www.google.com/search?q=the+keyword
curl -A "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_2) AppleWebKit/534.51.5 (KHTML, like Gecko) Version/5.1 Safari/534.51.3" http://www.google.pl/search?q=the+keyword
curl -A "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_2) AppleWebKit/534.51.5 (KHTML, like Gecko) Version/5.1 Safari/534.51.3" http://www.google.nl/search?q=the+keyword
第一个是
.com
,因为这应该作为您的参考点。肯定。
第二个是
.pl
,因为这是您遇到问题的地方。这也适用于我。
第三个是
.nl
,因为这是我住的地方(所以基本上
.pl
适合你)。这对我也很管用


我不确定,但这可能是一种可能的解释:

  • Google.com是国际性的,例如,当我在
    Google.nl
    输入内容时,我仍然会进入
    Google.com/search?q=…
    (唯一的区别是额外的
    lang
    -param)
  • 由于
    google.nl/search?q=…
    重定向到
    google.com
    302
    )。它的实际身体是空的
  • 我不知道,但可能cURL无法处理重定向,或者您需要设置一个附加标志
如果这是真的(我现在会检查),您需要使用
google.com
作为域,并添加一个额外的
lang
-param,而不是使用
google.pl

您的另一台服务器之所以这样做,可能是因为cURL的配置不同,或者cURL的版本不同


此外,它还阻止了cURL的默认用户代理字符串,因此我还建议您将其更改为:

Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_2) AppleWebKit/534.51.5 (KHTML, like Gecko) Version/5.1 Safari/534.51.3


这与您遇到的问题无关,但您实际上并没有关闭cURL套接字,因为您在关闭它之前返回(返回后的所有内容都将被“跳过”)。

我认为它会重定向您,因为您的位置在州内幸运的是,当我使用“google.pl”域搜索某个内容时,它保持在google.pl(没有302重定向)。然而,我以前遇到过302问题(让我们跳过细节,因为它们不是必需的)——而且cURL确实没有处理重定向。但是,当这个问题出现时,触发重定向的站点的实际主体并不是空的——谷歌有一条类似这样的消息:“站点被移动了(302)”。在我的例子中,cURL只是不返回任何东西(同样,如果我将timeout设置为600秒,它会等到这样的时间过去)。我认为使用带有附加“lr=lang_pl”参数集的“.com”域可以解决问题,但不幸的是,这种查询的结果与当我设置了推荐的用户代理时,谷歌将结果限制为10(它不考虑查询的Num参数)。我可能知道它为什么会发生。这是因为Mozilla 5使用动态谷歌搜索,并且不能设置“Num”。“使用动态搜索的参数。您是否具有服务器的shell访问权限
telnet google.pl 80
会告诉您这是一个PHP问题还是一个IP级别的块。如果有块,它应该返回什么?我没有shell访问权限,但我想我可以告诉我的服务器提供程序输入命令。没有。如果谷歌封锁了你的IP,你要么会被拒绝连接,要么只是超时。