Старый код, логинимся и получаем куки в строку:
// Отправка POST запроса с получением печенек:
function send_post_get_cookie($URL='', $PostData=Array(), $cookie='')
{
// Отсекаем пустые вызовы:
if (strlen($URL)<=0) return false;
// Скопировал строку из FireBug:
$ua = 'User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; ru; rv:1.9.2.13) Gecko/20101203 MRA 5.7 (build 03796) Firefox/3.6.13';
// Инициализация объекта:
$ch = curl_init($URL);
// показывать заголовки (в них куки):
curl_setopt($ch, CURLOPT_HEADER, 1);
// не показывать тело страницы (для экономии траффика):
curl_setopt($ch, CURLOPT_NOBODY, 1);
// это чтобы прикинуться браузером:
curl_setopt($ch, CURLOPT_USERAGENT, $ua);
// можно ставить еще вот это, если удаленный сервер проверяет:
// curl_setopt($ch, CURLOPT_REFERER, $URL);
curl_setopt($ch, CURLOPT_POST, 1);
// включение полей POST в запрос:
curl_setopt($ch, CURLOPT_POSTFIELDS, $PostData);
// если нужны печеньки, установим:
if (strlen($cookie)>0)
curl_setopt($ch, CURLOPT_COOKIE, $cookie);
// тормозим стандартный вывод:
ob_start();
// запускаем запрос:
curl_exec ($ch);
curl_close ($ch);
// получаем заголовки в массив:
$headers = explode("\n", ob_get_contents());
ob_end_clean();
// выдираем строку печенек:
for ($i=0, $cnt=count($headers); $i<$cnt; $i++)
if (strpos($headers[$i], 'Set-Cookie:') !== FALSE)
$cookie .= substr($headers[$i], strpos($headers[$i], 'Set-Cookie:')+strlen('Set-Cookie:'));
// и возвращаем результат:
return $cookie;
}
А потом используем ее в других запросах, к примеру загружаем файл после авторизации:
// Сохранение файла с удаленного хостинга:
function save_get_file($URL='', $cookie='')
{
if (strlen($URL)<=0) return false;
$filename = $_SERVER['DOCUMENT_ROOT'].'/upload/tmp/'.date('YmdHis_').rand(99,9999999).'.tmp';
$fp = fopen($filename, 'w');
if (!$fp)
return false;
else
{
$ua = 'User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; ru; rv:1.9.2.13) Gecko/20101203 MRA 5.7 (build 03796) Firefox/3.6.13';
$ch = curl_init($URL);
curl_setopt($ch, CURLOPT_USERAGENT, $ua);
curl_setopt($ch, CURLOPT_FILE, $fp); // чтобы выгрузить в файл;
if (strlen($cookie)>0)
curl_setopt($ch, CURLOPT_COOKIE, $cookie);
curl_exec ($ch);
curl_close ($ch);
return $filename;
}
}