在curl中模拟真实的浏览器

时间:2018-10-15 14:10:00

标签: php curl

一段时间以来,我一直在尝试编写理想的浏览器模拟,为此,我编写了一个脚本,该脚本在某种程度上模拟了浏览器,并且可以在使用ssl的许多页面上正常工作。最近在测试站点pornhub.com和wikipedia.com在我的脚本中遇到了一个奇怪的错误,只是对于pornhub,几页重新加载后显示了标题“正在加载..内容长度:1456”的状态以及已加载数据的更改数量实时查看越来越小的值。我想向已经非常有经验的专业程序员提出一个问题:您是否遇到过这种情况,如果可以,那么您对我的脚本有任何提示或更正吗?。

我发布了我的代码(测试维基百科)。如果您在3个浏览器选项卡上将其触发并刷新,则会收到错误消息。

<?php 
function curl($url)
{

    $headers = [
        'Accept-Language: pl,en-US;q=0.9,en;q=0.8',
        'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
        'User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36'
    ];
    $cookie = 'cookie.txt'; 
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($ch, CURLOPT_MAXREDIRS, 5);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
    curl_setopt($ch, CURLOPT_VERBOSE, 1);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 0); 
    curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
    curl_setopt($ch, CURLOPT_TIMEOUT, 10);
    curl_setopt($ch, CURLOPT_REFERER, 'https://www.wikipedia.org');
    curl_setopt($ch, CURLOPT_ENCODING, 'gzip'); 
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 
    if (!file_exists($cookie)){
    curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie);
    }else{     
    curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie);
    }
    $c = curl_exec($ch);
    curl_close($ch);
    return $c;
}

echo curl('https://www.wikipedia.org');
?>

0 个答案:

没有答案