PHP Парсер CURL (Парсинг HTTPS). Обход CURLOPT_FOLLOWLOCATION, safe_mode, open_basedir

Скрипт CURL для создания парсера, поддержка кукис и другие плюшки, работает с HTTPS, обходит cloudFlare

function curl_exec_follow($ch, &$maxredirect = null) {
 
  // we emulate a browser here since some websites detect
  // us as a bot and don't let us do our job
  $user_agent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.5)".
                " Gecko/20041107 Firefox/1.0";
  curl_setopt($ch, CURLOPT_USERAGENT, $user_agent );
 
//Cookies  Activate
curl_setopt($ch, CURLOPT_COOKIESESSION, true);
curl_setopt($ch, CURLOPT_COOKIEFILE, "reverse_ip.txt");
curl_setopt($ch, CURLOPT_COOKIEJAR, "reverse_ip.txt");

//Post Activate   
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, "remoteAddress=vk.com&key="); //Наши данные POST

//<-- для работы с https
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, TRUE);

  $mr = $maxredirect === null ? 5 : intval($maxredirect);

  if (ini_get('open_basedir') == '' && ini_get('safe_mode') == 'Off') {

    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, $mr > 0);
    curl_setopt($ch, CURLOPT_MAXREDIRS, $mr);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
   


   
   
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

  } else {
   
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);

    if ($mr > 0)
    {
      $original_url = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL);
      $newurl = $original_url;
     
      $rch = curl_copy_handle($ch);
     
      curl_setopt($rch, CURLOPT_HEADER, true);
      curl_setopt($rch, CURLOPT_NOBODY, true);
      curl_setopt($rch, CURLOPT_FORBID_REUSE, false);
      do
      {
        curl_setopt($rch, CURLOPT_URL, $newurl);
        $header = curl_exec($rch);
        if (curl_errno($rch)) {
          $code = 0;
        } else {
          $code = curl_getinfo($rch, CURLINFO_HTTP_CODE);
          if ($code == 301 || $code == 302) {
            preg_match('/Location:(.*?)\n/', $header, $matches);
            $newurl = trim(array_pop($matches));
           
            // if no scheme is present then the new url is a
            // relative path and thus needs some extra care
            if(!preg_match("/^https?:/i", $newurl)){
              $newurl = $original_url . $newurl;
            }  
          } else {
            $code = 0;
          }
        }
      } while ($code && --$mr);
     
      curl_close($rch);
     
      if (!$mr)
      {
        if ($maxredirect === null)
        trigger_error('Too many redirects.', E_USER_WARNING);
        else
        $maxredirect = 0;
       
        return false;
      }
      curl_setopt($ch, CURLOPT_URL, $newurl);
    }
  }
 

  return curl_exec($ch);
}

Скрипт является расширенной версией обычного CURL php парсера, обходит ошибку
Warning: curl_setopt() [function.curl-setopt]: CURLOPT_FOLLOWLOCATION cannot be activated when safe_mode is enabled or an open_basedir is set in /home/u607276581/public_html/scaner/send_post.php on line 15
Очень важно если safe_mode и open_basedir нет возможности отключить :( 

Запуск скрипта:
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$data = curl_exec_follow($ch);
curl_close($ch);

echo $data;

1 комментарий:

  1. Чувак он не работает, таже этот сайт не смог спарсить https://deadlylaugh.ru/

    ОтветитьУдалить