- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Переиграть и победить: как анализировать конкурентов для продвижения сайта
С помощью Ahrefs
Александр Шестаков
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
тоже решил заморочиться, все сработало нормально.
verbose:
* Trying 50.56.211.113... * connected
* Connected to www.site.com (50.56.211.113) port 80 (#0)
> POST /login HTTP/1.1
User-Agent: Mozilla/5.0 (X11; Linux i686; rv:16.0) Gecko/20100101 Firefox/16.0 Iceweasel/16.0
Host: www.site.com
Accept: */*
Referer: http://www.site.com/login
Content-Length: 74
Content-Type: application/x-www-form-urlencoded
< HTTP/1.1 302 Found
< Cache-Control: private
< Content-Type: text/html; charset=utf-8
< Location: /sna****/followingplus
< Server: Microsoft-IIS/7.5
* Added cookie siteFORMAUTH="C3C99C1733A....." for domain www.site.com, path /, expire 1384861666
< Set-Cookie: siteFORMAUTH=C3C99C1733AF......; expires=Tue, 19-Nov-2013 11:47:46 GMT; path=/
< Date: Mon, 04 Nov 2013 20:47:46 GMT
< Content-Length: 140
<
* Connection #0 to host www.site.com left intact
* Re-using existing connection! (#0) with host www.site.com
* Connected to www.site.com (50.56.211.113) port 80 (#0)
> GET /snatches/followingplus HTTP/1.1
User-Agent: Mozilla/5.0 (X11; Linux i686; rv:16.0) Gecko/20100101 Firefox/16.0 Iceweasel/16.0
Host: www.site.com
Accept: */*
Referer: http://www.site.com/login
Cookie: siteFORMAUTH=C3C99C1733AFE4......
< HTTP/1.1 200 OK
< Cache-Control: no-cache, no-store, must-revalidate
< Pragma: no-cache
< Content-Type: text/html; charset=utf-8
< Expires: -1
< Vary: Content-Encoding
< Server: Microsoft-IIS/7.5
* Added cookie ASP.NET_SessionId="l0zatrxduaeuj2......." for domain www.site.com, path /, expire 0
< Set-Cookie: ASP.NET_SessionId=l0zatrxduaeu.......; path=/; HttpOnly
< Date: Mon, 04 Nov 2013 20:47:46 GMT
< Content-Length: 42319
<
* Connection #0 to host www.site.com left intact
* Closing connection #0
bashkir102, решение подходит только для частного случая, когда location указывается относительно запрашиваемого урла.
FollowLocation, так и есть.
ну если локатион укажет на другой домен. надо рвать текущее соединение и инициировать curl по новой.
пробовал делать и такое решение.
function curl_send($url, $data, $referer = '', $is_redirect = false, $redirects = 0) {
global $fh, $host;
$ch = curl_init();
curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_STDERR, $fh);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_REFERER, $referer);
curl_setopt($ch, CURLOPT_AUTOREFERER, true);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (X11; Linux i686; rv:16.0) Gecko/20100101 Firefox/16.0 Iceweasel/16.0');
curl_setopt($ch, CURLOPT_COOKIEJAR, $_SERVER['DOCUMENT_ROOT'].'/cookie.txt');
curl_setopt($ch, CURLOPT_COOKIEFILE, $_SERVER['DOCUMENT_ROOT'].'/cookie.txt');
if ($data != false && $is_redirect != true) {
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
}
$data = curl_exec($ch);
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if (($http_code == 301 || $http_code == 302) && ++$redirects < 10) {
preg_match('/(Location:|URI:)(.*?)\n/', $data, $matches);
if (isset($matches[2])) {
$redirect_url = trim($matches[2]);
if ($redirect_url !== '') {
curl_close($ch);
$redirect_url = $host.$redirect_url; // надо проверять на текущий хост, если не ведет на другой домен
return curl_send($redirect_url, false, $referer, true, $redirects);
}
}
}
curl_close($ch);
return $data;
}
код надо дорабатывать, логика понятна. соединение рвется при редиректе и конектится по новой.
Да, это работает и мой костыль тоже, но получить универсальное решение так и не получилось. Я имею в виду код эмулятора, который бы самостоятельно пробегался по редиректам и давал такой же результат, как cURL c FOLLOWLOCATION. Например, в случае с данным конкретным сайтом.
Ни у кого предложений нет?