Location в CURL
Добрый день. Очень часто при написании скриптов авторизации встает проблема с перенаправлением. Например вы отправляете POST запрос на авторизацию и в ответ ,при удачной автоизации, мы молучаем следующее:
HTTP/1.1 302 Found Date: Fri, 16 Jul 2010 10:43:07 GMT Server: Apache/2 Expires: Mon, 26 Jul 1997 05:00:00 GMT Last-Modified: Fri, 16 Jul 2010 10:43:07 GMT Cache-Control: post-check=0, pre-check=0 Pragma: no-cache Location: /rus++/options/ Vary: Accept-Encoding Content-Encoding: gzip Content-Length: 20 Content-Type: text/html; charset=windows-1251
Итак при успешной автоизации скрипт нас должен отправить по адресу site.ru/rus++/options/ и такpих перенаправлений может быть целое множество. На помощь вам придет, функция на Php, которая парсит выдачу и перенаправляет нас куда нужно. Автор функции не Я, выдрал из одного забугорного даижка, но иногда очень выручает.
function curl_redir_exec($ch)
{
static $curl_loops = 0;
static $curl_max_loops = 20;
if ($curl_loops >= $curl_max_loops)
{
$curl_loops = 0;
return FALSE;
}
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$data = curl_exec($ch);
list($header, $data) = explode("\n\n", $data, 2);
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($http_code == 301 || $http_code == 302)
{
$matches = array();
preg_match('/Location:(.*?)\n/', $header, $matches);
$url = @parse_url(trim(array_pop($matches)));
if (!$url)
{
//couldn't process the url to redirect to
$curl_loops = 0;
return $data;
}
$last_url = parse_url(curl_getinfo($ch, CURLINFO_EFFECTIVE_URL));
if (!$url['scheme'])
$url['scheme'] = $last_url['scheme'];
if (!$url['host'])
$url['host'] = $last_url['host'];
if (!$url['path'])
$url['path'] = $last_url['path'];
$new_url = $url['scheme'] . '://' . $url['host'] . $url['path'] . ($url['query']?'?'.$url['query']:'');
curl_setopt($ch, CURLOPT_URL, $new_url);
//debug('Redirecting to', $new_url);
return curl_redir_exec($ch);
}
else
{
$curl_loops=0;
return $data;
}
}
Постовой: Качественный софт для видеоконференций. Сделай свою конференцию интерактивной.



Авторегер Narod.ru
[FAQ] Как грамотно писать скрипты под Human Emulator.
Автоматическая аддурилка Yandex
Test Maker v 1.0 — бесплатная CMS для создания online тестов
Здравствуйте! Меня зовут Михаил.Раньше я называл себя Новороссийским бомжем, но решил немного отойти от этого. Теперь мой блог - это Блог PHP программиста. Я уже 3 года занимаюсь PHP программированием. С недавнего времени создаю и продвигаю web сайты. Среди собственных разработок — самописная CMS, работающая на файлах, CMS для создания online тестов и т.д.