Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Заполнение форм


Автор: programming 13.8.2009, 12:27
Автозаполнение форм.
Нигде на форуме не нашёл подобной темы..
Нужно заполнить форму и нажать на кнопку в автоматическом режиме.
Я вообще не представляю как возможно нажать на кнопку автоматически..(у неё же нет url'а)
 smile 
Спасибо.

Автор: icewind 13.8.2009, 12:30
Не нужно ничего заполнять. Нужно сформировать поля POST запроса и отправить на адрес, который ждет ответа с формы

Автор: programming 13.8.2009, 12:38
А можно поподробнее про сформирование пост запроса..
Как именно он формируется?
Вот в get всё понятно - просто url - ex.com?per=000&lop=567, а в post даже не знаю как..

Автор: Ипатьев 13.8.2009, 12:39
Странно. Так много на форуме вопросов про автозаполнение форм. При том, что в реальной жизни такие задачи встречаются очень редко.
 

Автор: bars80080 13.8.2009, 12:46
традиционно все отправляют читать темы по использованию библиотеки cURL

Добавлено через 1 минуту и 24 секунды
собсна, ссылка из соседней темы http://ua2.php.net/curl

Автор: programming 13.8.2009, 13:16
А можно где-нибудь увидеть пример применения сurl в моём случае?

Автор: NewDima 13.8.2009, 14:31
http://www.google.ru/search?hl=ru&newwindow=1&q=%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5+curl+%D0%B2+php&btnG=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA&lr=&aq=0&oq=%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5+curl

Автор: programming 15.8.2009, 12:29
Нашёл материал по теме как авторизоваться на сайте - проверил, действительно работает. 
Код

<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://example.com/personal/login.phtml"); /* Переходим на страницу, на которой нужно пройти процедуру авторизации */
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "login=mylog&psw=mypassword"); /* Внимание! Здесь необходимо передать параметры, полученные Вами от сниффера – параметры разделяются знаком & */
curl_setopt($ch, CURLOPT_COOKIEJAR,$_SERVER['DOCUMENT_ROOT'].'/cookiefile.txt');
$result = curl_exec($ch);
curl_setopt($ch, CURLOPT_URL, "http://example.com"); /* Теперь заходите на сайт как авторизованный пользователь – в данном случае нужно вместо example.com указать URL страницы, на которую может попасть только авторизованный пользователь */
curl_setopt($ch, CURLOPT_POST, 0); /* Также необязательное действие, но я указал этот параметр – устанавливаю CURLOPT_POST в нуль, ведь теперь мне не нужно передавать данные методом POST */
curl_setopt($ch, CURLOPT_COOKIEFILE, $_SERVER['DOCUMENT_ROOT'].'/cookiefile.txt'); /* Внимание! Здесь третий параметр (адрес текстового файла с куками) должен быть точно таким же, как и при использовании CURLOPT_COOKIEJAR, иначе процедура авторизации работать не будет, так как требуемые серверу Куки не передадутся */
$result = curl_exec($ch);
curl_close($ch);
echo $result;
?>


Но теперь появилась ещё проблема. Мне нужно после авторизации перейти на следующую страницу и там ввести данные в ещё одну форму.. Можно увидеть примерный код этого?

Автор: nerezus 15.8.2009, 15:26
Цитата

Странно. Так много на форуме вопросов про автозаполнение форм. При том, что в реальной жизни такие задачи встречаются очень редко.
 Юные спамеры и собиратели контента ;)

Цитата

Но теперь появилась ещё проблема. Мне нужно после авторизации перейти на следующую страницу и там ввести данные в ещё одну форму.. Можно увидеть примерный код этого?
 Ты не поверишь. Но он такой же, только другие полня заполняешь и куки посылаешь.

Автор: programming 15.8.2009, 15:54
nerezus, так пробовал, но почему-то не получается.. smile 
Ладно сейчас ещё что-нибудь попробую.

Автор: nerezus 15.8.2009, 16:02
programming, сказать, почему?
Потому что пробовал мало.

Автор: programming 15.8.2009, 20:53
Пробовал очень не мало..
Не понимаю в чём проблема..
Авторизация проходит успешно.
Ещё момент - в форме, в которой у меня не получается автоматизировать ввод - используется ajax.
Это никак не может препятствовать?

Автор: nerezus 15.8.2009, 21:36
познаешь ты в отладке дзен

Автор: fesor 15.8.2009, 23:54
AJAX не задействуется таким способом. А вообще подозрительно зачем тебе сценарий дейтсвий для типичного спамбота?) Темболее на PHP) Может ты еще статьи с хабра про распознания капчи средствами PHP прочел?)

Автор: programming 16.8.2009, 14:08
fesor, нет. Просто изучаю.

В общем кажется понял в чём проблема.. 
Странице, на которой находится форма, передаётся ещё значение с помощью метода GET. То есть так - example.com/trt.php/ppp?ttt=000
Хотя быть может это вообще и не get.. В общем я окончательно запутался.. Возможно ли с помощью curl хотя бы просто открыть эту страницу?


Автор: programming 16.8.2009, 16:55
Нашёл способ как открыть такую страницу..
Вот:
Код

<?php
ini_set('display_errors', TRUE);
error_reporting(E_ALL|E_STRICT);

$get_string = "example.com/trt.php/ppp?ttt=000";

$s=file_get_contents ($get_string,"r");
echo $s;
?>

Но не могу понять теперь как передать ещё ей куки..
Можно увидеть какой-нибудь пример? smile 

Автор: programming 17.8.2009, 12:05
Ну неужели действительно этого никто не знает??? smile 

Автор: nerezus 17.8.2009, 13:44
Все знают, но им влом отлаживать за тебя.
Тебе дали все знания для выполенения задачи.

А куки - обычный http-заголовок. Думай.

Автор: Ипатьев 17.8.2009, 14:04
Странно. Почему такая игра в одни ворота. Почему тот, кто отвечает, должен рассказать все, а тот, кто спрашивает - ничего? Что за сайт, что за информация, что за форма? 
Если сам скрываешь информацию - будь добр не тянуть ее из других.


Автор: icewind 17.8.2009, 15:12
Код

$get_string = "example.com/trt.php/ppp?ttt=000";
$s=file_get_contents ($get_string,"r");

Плохой способ.

Нужно делать через курл или сокеты и отправлять куки

Цитата(nerezus @  17.8.2009,  13:44 Найти цитируемый пост)
А куки - обычный http-заголовок. Думай. 


Автор: programming 17.8.2009, 16:13
Оказывается даже авторизация проходит не успешно..
Уже не знаю что делать, поэтому опишу подробно..

Итак, есть страница http://example.com/login.php
На ней единственная форма, с помощью которой происходит авторизация.
Теперь по поводу формы - первое поле типа hidden с именем query. Второе типа text с названием username. Третье типа password с названием password. Четвёртое типа checkbox с названием keeppass. Пятое типа submit с названием submitted.
Метод - POST.
Не могу понять как произвести авторизацию с помощью curl..

И ещё вопрос - нужно в curl прописывать все поля формы или можно выборочно?(для POST запроса)

Автор: nerezus 17.8.2009, 18:21
Цитата

Плохой способ.
 Для GET-запросов без лишних параметров это просто ИДЕАЛЬНЫЙ способ.
Просто не надо искать универсальных способов, это прерогатива новичков.


programming, сделай усилие. Заставь себя это сделать это.
Хинт:  HttpFox плагин для firefox тебе поможет.

Автор: programming 17.8.2009, 19:17
Написать то я написал:
Код

<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://example.com/login.php"); /* Переходим на страницу, на которой нужно пройти процедуру авторизации */
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "query=&username=exm&password=123456"); /* Внимание! Здесь необходимо передать параметры, полученные Вами от сниффера – параметры разделяются знаком & */
curl_setopt($ch, CURLOPT_COOKIEJAR,$_SERVER['DOCUMENT_ROOT'].'/cookiefile.txt');
$result = curl_exec($ch);
curl_close($ch);
echo $result;
?>

При выполнении выползает белый экран.
Ещё момент - со страницы http://example.com/login.php выполняется редирект.

Добавлено через 9 минут и 3 секунды
Опа! Получилось!!!
Не понимаю вообще теперь ничего.. Ничего не трогал и получилось! smile 
Скорее всего в браузере сохранилась стр. с не успешной авторизацией..
Огромное спасибо всем кто мне помогал!
Особое спасибо хочу сказать nerezus, который заставил меня помучиться и добиться цели.
Спасибо.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)