使用PHP Curl + Proxies查询Google时遇到问题

时间:2010-11-07 14:52:44

标签: php curl proxy

在查询Google内容匹配时,Google阻止了我的IP。我有300个私有IP,并且可以通过执行类似功能的桌面应用程序(具有相同的IP)连接到Google。然而,当我使用CURL在我的服务器上启动时,我的IP暂时被阻止 - 您的机器可能会发送自动查询,请在30秒后重试。所以某处必须有足迹。

这是我的代码:

    function file_get_contents_curl($url, $proxy = true) {

    global $proxies;
    App::import('Vendor', 'proxies');

    $proxies = $this->shuffle_assoc($proxies);
    $proxy_ip = $proxies[array_rand($proxies, 1)];//proxy IP here
    $proxy = $proxy_ip.':60099';

    $loginpassw = 'myusername:mypassword';  //proxy login and password here

    $ch = curl_init();

    if($proxy) {

        curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, 1); 
        //curl_setopt($ch, CURLOPT_PROXYPORT, $proxy_port);
        curl_setopt($ch, CURLOPT_PROXYTYPE, 'HTTP');
        curl_setopt($ch, CURLOPT_PROXY, $proxy);
        curl_setopt($ch, CURLOPT_PROXYUSERPWD, $loginpassw);   
        curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)');  
    }

    curl_setopt($ch, CURLOPT_HEADER, 1);
    @curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    //Set curl to return the data instead of printing it to the browser.
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
    curl_setopt($ch, CURLOPT_URL, $url);
    $data = curl_exec($ch);
    //echo $data;
    curl_close($ch);
    return $data;
    }

我已经验证了IP正在设置并且我通过代理连接。

有人有任何想法吗?

3 个答案:

答案 0 :(得分:0)

尝试使用SOCKS5,但没有区别。 Google API的问题在于您每天只能获得100次查询。

答案 1 :(得分:0)

可以使用HTTP代理以及SOCKS代理,刮取谷歌搜索结果没有区别。
您被检测到的原因有多种。

  • 您的代理质量差或共享(可能在您不知情的情况下)
  • 您的代理只在一个或两个子网/太顺序
  • 您太快或太频繁地查询Google

您不应该经常使用IP超过每小时20次查询Google,这只是一个有效的粗略值,并且不会受到搜索引擎的惩罚。
因此,您应该根据代理计数实现延迟。

但是如果选项1)或2)是真的,甚至没有帮助,那么你将需要另一个IP解决方案。

查看Google排名刮刀(http://google-rank-checker.squabbel.com/),这是一个用于抓取Google的免费PHP项目,其中包含可用于您自己代码的正确延迟例程。
此外,缓存功能可能证明对您有用,因为您不希望查询超过要求的Google。

不要忘记:
如果您被检测到,请让您的脚本自动停止! 你只是遇到麻烦,检测意味着你做错了。

答案 2 :(得分:-1)

Http-proxies不保证您的隐私。你可以尝试使用袜子。

但你最好改用google-api