justyork
@justyork

Логин через curl с редиректом на страницу

Всем привет, мне необходимо очень быстро отправить в форму 120 комбинаций, в ручную это займет какое-то время, так что хочу попробовать это реализовать через curl:

$email = login@mail.ru';
$pass = '123'; 
$login_url = 'http://site.ru/login';
$pin_url = 'http://site.ru/promo';
$agent = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3';
$referer = 'http://site.ru/';
$data = array('name' => $email, 'pass' => $pass, 'send' => 'Войти'); 


// вход в систему
// имя хоста, куда будем заходить 
// инициализация cURL
$ch = curl_init($login_url);
// получать заголовки
curl_setopt ($ch, CURLOPT_HEADER, 1); 
// если ведется проверка HTTP User-agent, то передаем один из возможных допустимых вариантов:
curl_setopt ($ch, CURLOPT_USERAGENT, $agent);
// елси проверятся откуда пришел пользователь, то указываем допустимый заголовок HTTP Referer:
curl_setopt ($ch, CURLOPT_REFERER, $referer);
// использовать метод POST
curl_setopt ($ch, CURLOPT_POST, 1);
// сохранять информацию Cookie в файл, чтобы потом можно было ее использовать
curl_setopt ($ch, CURLOPT_COOKIEJAR, 'cookie.txt');
// передаем поля формы
curl_setopt ($ch, CURLOPT_POSTFIELDS, $data);
// возвращать результат работы
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
// не проверять SSL сертификат
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, 0);
// не проверять Host SSL сертификата
curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, 0);
// это необходимо, чтобы cURL не высылал заголовок на ожидание
curl_setopt ($ch, CURLOPT_HTTPHEADER, array('Expect:'));
// выполнить запрос
curl_exec ($ch);
// получить результат работы
$result = curl_multi_getcontent ($ch);
// вывести результат
echo "\n".'Login OK'."\n".'[result ===8<===>'."\n".$result."\n".'<===>8=== result]'."\n";
// закрыть сессию работы с cURL
curl_close ($ch);


Все, вроде как залогинился, теперь мне надо перейти на страницу $pin_url и там уже перебирать комбинации.
Я так понимаю если у меня создался файл с куками входить при каждой новой попытке уже не надо будет, если я не прав, поправьте.

Собственно вопросы:
1. Как перейти на страницу $pin_url и там уже начать делать перебор?
Возможно просто в этом же сеансе создать новый сеанс и просто перейти на новую страницу.
2. При переборе комбинаций, чтобы не вычислили я думаю надо поставить какой-то таймаут?
  • Вопрос задан
  • 4610 просмотров
Решения вопроса 1
@ChemAli
0. Входить не надо. Куки должный подцепиться сами, если будете использовать для последующих запросов те же опции (c вышеуказанным куки-файлом).
1. Сделать очередной curl_exec с $pin_url. Можно Не переходить, с разу делать запросы куда надо.
2. Если знаете что вычисляют или боитесь что вычислят — ставьте. Проще всего в цикле перебора sleep(rand(15)).
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
alekciy
@alekciy
Вёбных дел мастер
Если я правильно помню, то CURLOPT_COOKIEJAR просто пишет сеансовые куки в файл, но не читает их. Что бы и читало при запуске тоже нужно использовать CURLOPT_COOKIEFILE.

2. Действия залогиненного пользователя в нормальных системах логируются. Поэтому элементарно вычисляются. Так что вычислят легко, другой вопрос, а оно админу нужно... Поэтом если цель быть просто не забаненным, то таймауты помогут сильно не светиться.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽