CURL中的打开页面给出与浏览器不同的结果

时间:2014-03-19 15:38:18

标签: php curl

好吧,我试图用curl打开页面http://gratka.pl来获取它的内容,不幸的是它们似乎对它有很好的保护。我的代码(在ZEND FW中):

    $client = new \Zend\Http\Client;
    $client->setHeaders($options);
    $adapter = new \Zend\Http\Client\Adapter\Curl();

    $agent = 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; chromeframe/13.0.782.218; chromeframe; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)';
    //$agent = 'Googlebot/2.1 (+http://www.googlebot.com/bot.html)';
    $header=array(
        'User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.12) Gecko/20101026 Firefox/3.6.12',
        'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
        'Accept-Language: en-us,en;q=0.5',
        'Accept-Encoding: gzip,deflate',
        'Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7',
        'Keep-Alive: 115',
        'Connection: keep-alive',
    );

    $clientOptions = array(
        'curloptions' => array(
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_HEADER => true,
            //CURLOPT_ENCODING => "gzip",
            CURLOPT_SSL_VERIFYPEER => false,
            CURLOPT_USERAGENT => $agent,
            CURLOPT_VERBOSE => true,
            CURLOPT_AUTOREFERER => true,
            CURLOPT_COOKIEJAR => 'cookie.txt',
            CURLOPT_COOKIEFILE => 'cookie.txt',
            CURLOPT_HTTPHEADER => $header,
            CURLOPT_REFERER => "http://google.com",
            //CURLOPT_COOKIE => 'sesja_gratka=065ad930ce08fa203b39e2599f19e345; __gfp_64b=8IF3rdQKeCJiUBB.P4vNx3KWyCYii.16iOnjxq.C6tz.77; PHPSESSID=26f34d5c637c9db9c752695b2a2db427; __utmc=239465948',
        ),
    );

    $client->setOptions($clientOptions);
    $client->setAdapter($adapter);  
    $client->setUri($url);
    $result = $client->send();
    $cookies = $client->getCookies();
    $header = $result->getHeaders();
    $body = $result->getBody();
    var_dump($body);die;
    var_dump(htmlspecialchars($header));die;

我正在尝试许多选项和事情,但仍然是相同的 - 没有得到饼干,没有得到身体......除了有效的网站内容我一直在得到的所有页面说 - '你是临时阻止“。用浏览器打开同一个网站时一切都很好。

1 个答案:

答案 0 :(得分:0)

如果生成了cookie.txt,则将其清空并再次运行卷曲。可能是它根据cookie的值阻止了你。

如果未生成cookie.txt文件,则使用绝对路径,例如/var/xyz/cookie.txt,并检查您是否对该文件具有写入权限,以便curl可以在该文件上写入cookie。

此外,详细模式返回了什么?您可以将请求与浏览器的请求进行匹配。你在同一台PC上运行浏览器和卷曲吗?或者它部署在你的服务器上?只是为了交叉检查!