- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
VK приобрела 70% в структуре компании-разработчика red_mad_robot
Которая участвовала в создании RuStore
Оксана Мамчуева
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Добрый день.
Есть такая задача, отправляю POST запросом(через CURL) на какую-то страницу данные, после отправки происходит редирект на страницу и необходимо выяснить адрес страницы, после всех редиректов возможных. К примеру, форма создания топика на форуме, она отправляет данные по одному адресу, а после успешного создания топика происходит пере направление на сам топик форума, вот необходимо выяснить последний адрес у страницы после отправки данных.
Уже пробовал и через заголовки вычислить, что-то не выходит и пробовал получить из "curl_getinfo", также не даёт нужного урла в массиве.
Подскажите кто знает.
Как вариант можно отключить FOLLOWLOCATION, поочередно брать урлы из заголовков и переходить по ним, пока не достигнете последнего, который и будет искомым.
Пожалуй так и сделаю, потому как этот вариант и поборит ошибку "CURLOPT_FOLLOWLOCATION cannot be activated when safe_mode is enabled or an open_basedir is set in".
У кого-то есть РАБОЧАЯ функция, которая проходит по всем заголовкам из урлов? Здесь смотрел http://stackoverflow.com/questions/2511410/curl-follow-location-error и здесь http://php.net/manual/en/function.curl-setopt.php то ли я не разобрался что не так, то ли руки кривые у меня, но добиться рабочей функции так и не удалось. Если у кого-то есть РАБОЧАЯ поделитесь :)
Вот это попробуйте (включен режим отладки). Дальше разберетесь, думаю.
function curl_redir_exec1($ch,$debug=false){
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);
$debbbb = $data;
list($header, $data) = explode("\n\n", $data, 2);
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$new_url="";
if ($http_code == 301 || $http_code == 302) {
$matches = array();
preg_match('/Location:(.*?)\n/', $header, $matches);
$url = parse_url(trim(array_pop($matches)));
print_r($url);
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));
$new_url = $url['scheme'] . '://' . $url['host'] . $url['path'] .($url['query']?'?'.$url['query']:'');
curl_setopt($ch, CURLOPT_URL, $new_url);
if($debug){echo "Loop $curl_loops: Redirecting to $new_url\n";flush();}
return curl_redir_exec1($ch);
} else {
$curl_loops=0;
return $debbbb;
}
}
//=========================================
$ch=curl_init();
//--отдаём куку и отправляем свои данные-ЛОГИНИМСЯ
curl_setopt($ch, CURLOPT_URL,$_POST['url_posting']);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch , CURLOPT_HTTPHEADER , $header );
curl_setopt($ch, CURLOPT_FAILONERROR, 1);
curl_redir_exec1($ch,true);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 100);
curl_setopt($ch, CURLOPT_REFERER,$_POST['ref']);
curl_setopt($ch, CURLOPT_POSTFIELDS,$post_fields);
curl_setopt($ch, CURLOPT_USERAGENT, $_POST['user_agent']);
curl_setopt($ch, CURLOPT_COOKIEFILE, $_POST['cookies_path']);
curl_setopt($ch, CURLOPT_COOKIEJAR, $_POST['cookies_path']);
$result=curl_exec($ch);
return $result;
Не переходит и не отлавливает куда дальше переходить. Что-то в функции не так :(
Кажется, понял: у Вас данные post-запроса передаются после вызова функции. Надо бы сделать ДО.
Там адрес страницы, куда я отправляю POST запрос.