Ні, звичайно ж я це враховую і змінив вже свій код. Після довгих пошуків рішення я знайшов собі функцію get_web_page() десь на тому ж stackoverflow, трохи підлампічив її під себе, ну і дописав ще три функції:
<?php
function get_web_page( $url, $cookiesIn = '' )
{
$options =
[
CURLOPT_RETURNTRANSFER => true, // return web page
CURLOPT_HEADER => true, //return headers in addition to content
CURLOPT_CONNECTTIMEOUT => 120, // timeout on connect
CURLOPT_USERAGENT => 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:36.0) Gecko/20100101 Firefox/36.0',
CURLOPT_COOKIEFILE => 'cookie_file.txt',
CURLOPT_COOKIEJAR => 'cookie_jar.txt',
CURLOPT_TIMEOUT => 120, // timeout on response
CURLOPT_MAXREDIRS => 10, // stop after 10 redirects
CURLINFO_HEADER_OUT => true,
CURLOPT_SSL_VERIFYPEER => false, // Disabled SSL Cert checks
CURLOPT_COOKIE => $cookiesIn
];
$ch = curl_init( $url );
curl_setopt_array( $ch, $options );
$rough_content = curl_exec( $ch );
$err = curl_errno( $ch );
$errmsg = curl_error( $ch );
$header = curl_getinfo( $ch );
curl_close( $ch );
$header_content = substr($rough_content, 0, $header['header_size']);
$body_content = trim(str_replace($header_content, '', $rough_content));
$pattern = "#Set-Cookie:\\s+(?<cookie>[^=]+=[^;]*)#m";
preg_match_all($pattern, $header_content, $matches);
$cookiesOut = implode("; ", $matches['cookie']);
$header['errno'] = $err;
$header['errmsg'] = $errmsg;
$header['headers'] = $header_content;
$header['content'] = $body_content;
$header['cookies'] = $cookiesOut;
return $header;
}
function http_parse_cookie( $str_cookies )
{
$arr_coookies = explode('; ', $str_cookies);
foreach($arr_coookies as $key => $cookie)
{
unset($arr_coookies[$key]);
preg_match('#^([^=]+)=(.*)#', $cookie, $matches);
if(isset($matches[1]))
$arr_coookies[$matches[1]] = $matches[2];
}
return $arr_coookies;
}
function http_build_cookie( $arr_coookies )
{
foreach($arr_coookies as $key => $value)
{
$arr_coookies[$key] = "$key=$value";
}
return str_replace('; =', '', implode('; ', $arr_coookies) );
}
function get_content($url)
{
$cookie_file = 'cookie_file.txt';
$current_cookies = file_get_contents($cookie_file);
$content = get_web_page($url, $current_cookies);
$current_cookies = http_parse_cookie($current_cookies);
$new_cookies = http_parse_cookie($content['cookies']);
foreach($new_cookies as $key => $value)
{
$current_cookies[$key] = $value;
}
file_put_contents( $cookie_file, http_build_cookie($current_cookies) );
return $content['content'];
}
Тепер можна один раз прописати налаштування у get_web_page() та встановити актуальні куки у файл cookie_file.txt.
Ну і потім вже можна викликати функцію get_content($url), яка повертає контент.
P.S. У функції http_build_cookie() є такий фрагмент
str_replace('; =', '', implode('; ', $arr_coookies) );
це невеличкий костиль, який мені було лінь вночі переписувати... він зараз потрібен, бо постійно у файлі куків чомусь залишається '; =' без відповідної куки.
Зараз проспався, то гляну що воно таке.